Я хочу выполнить некоторые дорогостоящие операции, когда моя модель изменится, поэтому я делаю это асинхронно в отложенной работе.Внутри этой работы мне нужно иметь возможность сказать, какие именно изменения произошли, поэтому я передаю измененную модель в качестве параметра отложенному заданию.
Теперь кажется, что отложенное задание извлекает новое(нетронутая) версия модели из базы данных при запуске задания, в которой нет отслеженных изменений, которые мне нужны.
class MyModel < ActiveRecord::Base
after_save :perform_async_job
def perform_async_job
# Here, "self.changes" contains the changes
Delayed::Job.enqeue(AsyncJobPerformer.new(self), ...)
end
end
class AsyncJobPerformer
def initialize(model)
@model = model
end
def perform
# Here, "@model.changes" is empty
end
end
Я могу, конечно, передать только хэш changes
, а не саму модель, но это сделает код отложенного задания гораздо более сложным, так как ему все равно нужно использовать экземпляр модели(поэтому мне нужно извлечь его и использовать модель и изменения как отдельные объекты).
Есть ли способ передать модель отложенному заданию при сохранении отслеженных изменений?