Используй Act_as_paranoid с DelayedJob?
Может кто-нибудь сказать мне, как именно интегрировать acts_as_paranoid
с DelayedJob
? Я пытался создать класс Delayed::Backend::ActiveRecord::Job
и добавление acts_as_paranoid
к нему, но даже если я использую инициализатор и require
новый класс act_as_paranoid, похоже, ничего не делает.
Я не получаю никаких ошибок, так paranoia
Похоже, что он установлен правильно, и задание удаляется после успешного завершения, что, конечно, я и пытаюсь предотвратить.
Рад попробовать любые предложения по отладке, если никто не читает это и сразу же знает, как я облажался.
2 ответа
Оказывается, я попал на проблему "область видимости по умолчанию". acts_as_paranoid
изменяет область действия по умолчанию, чтобы find
Возвращает только те записи, которые не были удалены. Если вы хотите увидеть ВСЕ записи, включая удаленные, вам нужно либо добавить with_deleted
как область для вашего запроса или, при добавлении acts_as_paranoid
к вашему классу добавьте согласно примеру:
class Client < ActiveRecord::Base
acts_as_paranoid without_default_scope: true
...
end
С любым из этих изменений все работает.
Я знаю, что вы ответили на свой вопрос, вроде как, но ваш ответ не помогает людям, приземляющимся здесь, стремящимся интегрироваться DelayedJob
с acts_as_paranoid
поэтому я решил объяснить это другим.
Создать миграцию для добавления
deleted_at
вdelayed_jobs
:rails generate migration add_deleted_at_to_delayed_jobs deleted_at:datetime
Запустите миграции:
rake db:migrate
Расширить
Delayed::Job
класс для добавленияacts_as_paranoid
:config/initializers/delayed_job.rb
class Delayed::Job acts_as_paranoid end
Это оно!
Теперь, когда работа завершена, вы увидите, что она не удаляется из delayed_jobs
таблицы, он просто получает метку времени в deleted_at
колонна, чтобы рабочие не подняли ее.
ProTip: The deleted_at
столбец указывает, когда работа была завершена.