PaperTrail: info_for_paper_trail fuera del contexto de un controlador
Estoy usando elrastro de papel Joya para versionar mis modelos.
Hasta ahora, mi modelo depende de lainfo_for_paper_trail
método enApplicationController
:
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
Esto funciona muy bien en el contexto del controlador, pero ¿hay alguna manera de que pueda replicar este tipo de cosas fuera del contexto del controlador (por ejemplo, un trabajo retrasado)?
Intenté crear un atributo virtual llamadorevision
y pasando unproc
dentrohas_paper_trail
, pero falla con unamethod not found
excepción:
# 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!
Supongo basado en este resultado quemeta
no puede tomar unproc
Y además, no me gusta cómo huele esta solución ...