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ąćproc
i dodatkowo nie podoba mi się, jak to rozwiązanie pachnie tak ...