ruby-on-rails - PaperTrail : info_for_paper_trail outside the context of a controller

标签 ruby-on-rails ruby-on-rails-3 versioning delayed-job paper-trail-gem

我正在使用 paper_trail用于对我的模型进行版本控制的 gem。

到目前为止,我的模型依赖于 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

这在 Controller 的上下文中效果很好,但是有没有办法可以在 Controller 的上下文之外复制这种事情(例如,延迟的工作)?

我尝试创建一个名为 revision 的虚拟属性并通过 proc进入 has_paper_trail ,但它会出现 method not found 错误异常(exception):
# 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 ,而且我不喜欢这个解决方案的味道......

最佳答案

如果您在 Controller 之外进行操作,则需要在代码中设置这些值:

::PaperTrail.controller_info = { revision_id: revision.id, revision_source_id: revision_source.id }
::PaperTrail.whodunnit = user.id

然后模型将像通常从 Controller 中一样选择额外的值。

我通过查看 PaperTrail::Controller 得出此信息模块。特别是看set_paper_trail_controller_infoset_paper_trail_whodunnit像之前过滤器一样运行的方法。

关于ruby-on-rails - PaperTrail : info_for_paper_trail outside the context of a controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17970490/

相关文章:

ruby-on-rails - MongoMapper(或任何其他 Mongodb 适配器)是否有类似 "accepts_nested_attributes_for"的方法?

ruby-on-rails - 验证网址 |前置 http ://

ruby-on-rails - Authlogic 和单一访问 token

.net - 如何重构在 .NET 中序列化的类?

cordova - 如何获取我在 config.xml 中定义的版本字符串

ruby-on-rails - Rails 3,在布局中查找当前 View

ruby-on-rails - 弄清楚给定站点需要哪些 Heroku 资源

ruby-on-rails - 在 Rails 3 中处理 Vanity URL 助手的最佳方法是什么?

ruby-on-rails - 即使 user_signed_in 时,current_user 也会返回 nil?返回真

javascript - 如何强制客户端刷新 JavaScript 文件?