Я использую жемчужину paper_trail для версий моих моделей.PaperTrail: info_for_paper_trail вне контекста контроллера
До сих пор моя модель зависит от метода info_for_paper_trail
в ApplicationController
:
class ApplicationController < ActionController::Base
# Extra columns to store along with PaperTrail `versions`
def info_for_paper_trail
{ revision_id: @revision.id, revision_source_id: @revision_source.id }
end
end
Это прекрасно работает в контексте контроллера, но есть способ, что я могу повторить такого рода вещи вне контекста контроллера (например, отложенное задание)?
Я попытался создать виртуальный атрибут называется revision
и передавая proc
в has_paper_trail
, но ошибки вне с method not found
исключением:
# Attempt to solve this in the model
class Resource < ActiveRecord::Base
# Virtual attribute
attr_accessor :revision
# Attempt to use virtual attribute only if set from delayed job
has_paper_trail meta: proc { |resource| resource.revision.present? ? { revision_id: resource.revision.id, revision_source_id: revision.revision_source.id } : {} }
end
# Gist of what I'm trying to do in the delayed job
resource = Resource.new
resource.revision = Revision.new(user: user, revision_source: revision_source)
resource.save!
Я предполагаю, что на основе этого результата meta
не может взять proc
, и плюс мне не нравится, как это решение пахнет в любом случае ...