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 のみを取得しますが、ユーザー インスタンスを取得してusernameを取得したいと考えています。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

4

それを行う別の方法があります:

class Version < PaperTrail::Version
    ...

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

クラス自体にユーザー モデルを追加する必要がある場合はPaperTrail::Version、新しい初期化子をアプリに追加します。

config/initializers/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

バージョンモデルに関係を追加できます

config/initializers/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 に答える