PaperTrail: info_for_paper_trail poza kontekstem kontrolera

Używampapierowy szlak klejnot do wersjonowania moich modeli.

Jak dotąd mój model zależy odinfo_for_paper_trail metoda wApplicationController:

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

Działa to doskonale w kontekście kontrolera, ale czy istnieje sposób, aby można było replikować tego rodzaju rzeczy poza kontekstem kontrolera (np. Opóźnione zadanie)?

Próbowałem utworzyć atrybut wirtualny o nazwierevision i mijającproc whas_paper_trail, ale to błądmethod not found wyjątek:

# 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!

Zakładam, że na podstawie tego wynikumeta nie może wziąćproci dodatkowo nie podoba mi się, jak to rozwiązanie pachnie tak ...

questionAnswers(2)

yourAnswerToTheQuestion