Rails Papertrail - 显示谁负责上次更改

Rails Papertrail - display who Was Responsible for last change

我正在使用 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 %>

但是我得到了结果错误: nil:NilClass

的未定义方法 `whodunnit'

app/controllers/people_controller.rb:15:在“显示”中

非常感谢任何帮助,谢谢

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

我想你必须检查一下你是否有要显示的信息:

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

这一定能解决问题。

我更喜欢修改初始值设定项以保持模板干净。

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 %>

今晚我用谷歌搜索了一下这个话题。我只是想能够写出类似 @post.versions.last.user 的东西并获得设计用户记录(即 whodunnit 那个版本)。

对我有用的方法是使用

创建 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 not set 或 something and/or undefined methodtimestamp_sort_order'`.

这正是对我有用的。

其他选项包括在您的 app/models 中创建这个,我喜欢这个想法但从未尝试过,因为这个 'worked' 我还有其他我想写的代码:)