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 ...

Antworten auf die Frage(2)

Ihre Antwort auf die Frage