Когда вы вызываете .perform_later
с ActiveRecord
объектом, ActiveJob
попытается сериализовать его в глобальный идентификатор
. Вы удаляете свою запись из базы данных, котораяозначает, что ваша работа не найдет ее при запуске.
Вы можете передать хеш со всеми атрибутами: CleanUpJob.perform_later(post.attributes)
В качестве альтернативы, вы можете пометить вашу модель для удаления и вызвать вработа, когда вы на самом деле сделали с записью.Подумайте об этом, как о программном удалении записи:
# in the controller
def destroy
post = Post.find params[:id]
post.update(state: :archived) # or whatever makes more sense for your application
CleanUpJob.perform_later(post.id, post.title)
end
# in the job
def perform(post_id, post_title)
log_destroyed_content(post_id, post_title)
post.destroy
end
Вы должны обязательно исключить записи с «мягким удалением» из запросов, обращенных к пользователю.