如何将方法添加到Paper_trail的版本模型?

Hop*_*eam 1 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我想为paper_trail版本创建以下方法:

def user
  User.find self.whodunnit.to_i
end
Run Code Online (Sandbox Code Playgroud)

这样我就可以在我的应用程序中自然地访问版本的用户,就好像它有belongs_to关系一样.

我应该在哪里放置此功能(文件夹和文件名)以覆盖/添加到paper_trail的版本模型?

Jac*_*own 6

您可以将它放在config/initializers/paper_trail.rb打开PaperTrail::Version类的初始化程序(例如)中:

module PaperTrail
  class Version < ActiveRecord::Base
    def user
      User.find self.whodunnit.to_i
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

你需要确认你的Version模型是PaperTrail::Version; 旧版本的宝石只使用Version.在这种情况下,只需删除外部模块语句.

您还可以创建一个继承自的自定义类Version,并在您的has_paper_trail调用中指定该类.例如(来自README):

class PostVersion < PaperTrail::Version
  # custom behaviour, e.g:
  self.table_name = :post_versions
end

class Post < ActiveRecord::Base
  has_paper_trail :class_name => 'PostVersion'
end
Run Code Online (Sandbox Code Playgroud)

  • 对于现在尝试这个的人:从版本3.0.3开始,你需要在config/initializers/paper_trail.rb的顶部包含以下行:`PaperTrail :: Rails :: Engine.eager_load!`参考文献:[完整代码in自述](https://github.com/airblade/paper_trail#storing-metadata),[Github问题](https://github.com/airblade/paper_trail/issues/392). (2认同)