2014-02-18 73 views
4

在我的主頁上,我使用papertrail顯示最新的更新。使用whodunnit獲取用戶實例

控制器

@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.user.username。v.whodunnit。

我一直在尋找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 

編輯

我得到這個,當我有<%= v.user%>鑑於

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

什麼是與當前版本的問題? –

+0

當我嘗試在我的視圖中獲取v.user時,我得到了未定義的方法'user' – Pierre

回答

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 
+0

當我嘗試運行<%= v.user %>與您的方法時,我得到了與上面所做的相同的錯誤。未定義的方法'用戶'的# Pierre

+0

我想,我明白了這個問題。你'v'變量是類'PaperTrail :: Version',而不是你自定義的'Version'。你需要猴子補丁'PaperTrail :: Version'類。 –

+0

好的,謝謝,我怎麼能做到這一點?介意更新你的答案? – Pierre

0

您可以將關係添加到版型

配置/初始化/ paper_trail.rb

# paper trail config ... 
    # ... 

    module PaperTrail 
     class Version < ::ActiveRecord::Base 
     belongs_to :user, foreign_key: :whodunnit 
     end 
    end 
相關問題