我正在使用paper_trail gem來對我的模型進行版本控制。PaperTrail:控制器上下文外的info_for_paper_trail
到目前爲止,我的模型依賴於info_for_paper_trail
方法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
這工作在控制器的背景很大,但沒有辦法,我可以複製這樣的事情的範圍之外的方式的控制器(例如,延遲工作)?
我試圖創建一個虛擬屬性,叫做revision
和傳遞proc
爲has_paper_trail
,但它具有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!
我想基於這個結果meta
不能採取proc
,和加上我不喜歡這個解決方案如何聞起來......