使用whodunnit获取用户实例

时间:2014-02-18 21:16:21

标签: ruby-on-rails ruby-on-rails-4 paper-trail-gem

在我的主页上,我使用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。

我一直在关注similar question,但似乎无法找到创建版本与用户之间关系的方法。

用户模型

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

修改

当我有&lt;%= v.user%&gt;时,我得到了这个在视野中

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

3 个答案:

答案 0 :(得分:3)

还有另一种方法:

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

<强>配置/初始化/ paper_trail.rb

    # paper trail config ...
    # ...

    module PaperTrail
      class Version < ::ActiveRecord::Base
        belongs_to :user, foreign_key: :whodunnit
      end
    end