5

在我的主页上,我使用 papertrail 显示最新更新。

控制器

@contributions = PaperTrail::Version.all.order("created_at DESC")

看法

<% @contributions.each do |v| %>
    <h2><%= v.item.name %><small>by </small></h2>
    <% v.changeset.each do |data| %>
      <h4><%= data %></h4>
    <% end %>
    <%= v.whodunnit %>
<% end %>

在这里,我得到了关联的用户,但只有 whodunnit 的 ID,但我想获取一个用户实例来获取用户名。所以安装了 v.whodunnit 我想要 v.user.username。

我一直在看一个类似的问题,但似乎无法找到一种方法来创建版本和用户之间的关系。

用户模型

class User < ActiveRecord::Base
  has_many :versions, :foreign_key => 'whodunnit', :class_name => "PaperTrail::Version"
end

版本型号

class Version < PaperTrail::Version
  belongs_to :user, :foreign_key => 'whodunnit'
end

编辑

当我看到 <%= v.user %> 时,我得到了这个

undefined method `user' for #<PaperTrail::Version:0x007fb24c08e868>
4

5 回答 5

5

Rails 5.X 的更新版本

# config/initializers/paper_trail.rb
PaperTrail::Rails::Engine.eager_load!

module PaperTrail
  class Version < ::ActiveRecord::Base
    belongs_to :user, foreign_key: :whodunnit
  end
end
于 2019-04-17T17:34:55.790 回答
4

有另一种方法可以做到这一点:

class Version < PaperTrail::Version
    ...

    def user
         User.find(whodunnit) if whodunnit
    end  
end

如果您需要将用户模型添加到PaperTrail::Version类本身,则向您的应用程序添加一个新的初始化程序:

配置/初始化程序/papertrail_monkey_patch.rb

module PaperTrail
    class Version
        def user
            User.find(whodunnit) if whodunnit
        end
    end
end
于 2014-02-18T21:58:39.513 回答
2

您可以将关系添加到版本模型

配置/初始化程序/paper_trail.rb

    # paper trail config ...
    # ...

    module PaperTrail
      class Version < ::ActiveRecord::Base
        belongs_to :user, foreign_key: :whodunnit
      end
    end
于 2017-08-05T19:18:15.123 回答
0

添加模型

class PaperTrailVersion < PaperTrail::Version
    belongs_to :user, foreign_key: :whodunnit
end
于 2021-09-27T14:08:24.303 回答
0

请参阅有关添加您自己的自定义版本模型的文档:

class UserVersion < PaperTrail::Version
  belongs_to :user, foreign_key: :whodunnit
end

然后在您要跟踪更改的类中指定自定义模型:

class Contribution
  has_paper_trail versions: {class_name: 'UserVersion'}
end

如果您需要一次显示多个版本,这样做还可以让您预先加载关联的用户:

Contribution.versions.includes(:user)
于 2021-11-27T03:42:28.033 回答