Using whodunnit to get User Instance

paper-trail-gem, ruby-on-rails, ruby-on-rails-4

Solution

There is an alternative way to do it:

class Version < PaperTrail::Version
    ...

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

If you need to add user model to the `PaperTrail::Version` class itself, then add a new initializer to your app:

config/initializers/papertrail_monkey_patch.rb

module PaperTrail
    class Version
        def user
            User.find(whodunnit) if whodunnit
        end
    end
end

Problem

On my home page i display the latest updates using papertrail. Controller ``` @contributions = PaperTrail::Version.all.order("created_at DESC") ``` View ``` <% @contributions.each do |v| %> <h2><%= v.item.name %><small>by </small></h2> <% v.changeset.each do |data| %> <h4><%= data %></h4> <% end %> <%= v.whodunnit %> <% end %> ``` Here i get the associated user but only the ID with whodunnit, but i would like to get a user instance to get a username. So insted of v.whodunnit i would like v.user.username. I have been looking at a similar question but cant seem to figure out a way create the relation between a version and a user. User model ``` class User < ActiveRecord::Base has_many :versions, :foreign_key => 'whodunnit', :class_name => "PaperTrail::Version" end ``` Version model ``` class Version < PaperTrail::Version belongs_to :user, :foreign_key => 'whodunnit' end ``` EDIT I get this when I have <%= v.user %> in view ``` undefined method `user' for #<PaperTrail::Version:0x007fb24c08e868> ```

Original source