PaperTrail: info_for_paper_trail fora do contexto de um controlador
Estou usando opaper_trail gem para versionar meus modelos.
Até agora, meu modelo depende doinfo_for_paper_trail
método emApplicationController
:
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
Isso funciona muito bem no contexto do controlador, mas existe uma maneira de replicar esse tipo de coisa fora do contexto do controlador (por exemplo, um trabalho atrasado)?
Eu tentei criar um atributo virtual chamadorevision
e passando umproc
para dentrohas_paper_trail
, mas com erros com ummethod not found
exceção:
# 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!
Eu assumo baseado neste resultado quemeta
não pode tomar umproc
e mais eu não gosto de como esta solução cheira de qualquer maneira ...