PaperTrail: info_for_paper_trail außerhalb des Kontexts eines Controllers
Ich benutze diePapier Spur Juwel für die Versionierung meiner Modelle.
Bisher hängt mein Modell von derinfo_for_paper_trail
Methode inApplicationController
:
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
Dies funktioniert im Kontext des Controllers hervorragend, aber gibt es eine Möglichkeit, solche Dinge außerhalb des Kontexts des Controllers zu replizieren (z. B. einen verzögerten Job)?
Ich habe versucht, ein virtuelles Attribut namens zu erstellenrevision
und vorbei aproc
inhas_paper_trail
, aber es fällt mit einem Fehler ausmethod not found
Ausnahme:
# 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!
Ich gehe davon aus, dass aufgrund dieses Ergebnissesmeta
kann nicht nehmenproc
, und außerdem gefällt mir nicht, wie diese Lösung überhaupt riecht ...