J'utilise le bijou paper_trail pour versioning mes modèles.Papertrail: info_for_paper_trail en dehors du contexte d'un contrôleur
Jusqu'à présent, mon modèle dépend de la méthode info_for_paper_trail
dans 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
Cela fonctionne très bien dans le contexte du contrôleur, mais est-il un moyen que je peux reproduire ce genre de chose en dehors du contexte du contrôleur (par exemple, un travail retardé)?
J'ai essayé de créer un attribut virtuel appelé revision
et passer un proc
dans has_paper_trail
, mais des erreurs avec une exception 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!
Je suppose que la base de ce résultat que meta
ne peut pas prendre un proc
et plus je n'aime pas comment cette solution sent de toute façon ...