Rails Papertrail - 显示谁负责最后一次更改

时间:2015-03-24 16:31:54

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

我正在使用Devise和Papertrail,并希望显示哪个用户进行了最新更新(documentation link)。

在控制器中:

  def show
    # @history = @person.versions.last 
    @last_change = @person.versions.last
    @user_who_made_the_change = User.find @last_change.whodunnit.to_i
  end

在展会页面

 <%= @user_who_made_the_change %>

但是我收到了错误: 未定义的方法`whodunnit'代表nil:NilClass

app / controllers / people_controller.rb中的

:15:在'show'

非常感谢任何帮助,谢谢

3 个答案:

答案 0 :(得分:1)

省略保存版本数据的原因有很多(配置,保存没有回调,从控制台保存...)

我认为您必须检查是否有要显示的信息:

def show
  @last_change = @person.versions.last
  @user_who_made_the_change = (User.find(@last_change.whodunnit.to_i) if @last_change && @last_change.whodunnit) || nil
end

这必须做到这一点。

答案 1 :(得分:1)

我更喜欢修改初始化程序以保持模板干净。

config / initializers / paper_trail.rb

PaperTrail::Rails::Engine.eager_load!

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

history.html.erb

<% @versions.each do |version| %>
  <%= version.user.email %>
<% end %>

答案 2 :(得分:0)

今天晚上,我对这个话题做了一些谷歌搜索。我只是希望能够编写类似@post.versions.last.user的东西并获得设计用户记录(即那个版本的人 whodunnit )。

对我有用的方法是使用{p>创建paper_trail.rb初始化程序

PaperTrail::Rails::Engine.eager_load!

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

一些解决方案给了我错误,包括 json col未设置或某些东西和/或undefined method timestamp_sort_order'。

这正是对我有用的。

其他选项包括在您的app/models中创建此文件,我喜欢这个想法,但是从未尝试过使它“起作用”,并且我想编写其他代码:)