0

我正在使用 Devise 和 Papertrail 并想显示哪个用户进行了最新更新(文档链接)。

在控制器中:

  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:in `show'

任何帮助将不胜感激,谢谢

4

3 回答 3

2

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

配置/初始化程序/paper_trail.rb

PaperTrail::Rails::Engine.eager_load!

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

历史.html.erb

<% @versions.each do |version| %>
  <%= version.user.email %>
<% end %>
于 2019-01-11T14:05:41.177 回答
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

这必须解决问题。

于 2015-03-24T19:09:52.293 回答
0

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

对我有用的方法是创建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 methodtimestamp_sort_order'`。

这正是对我有用的。

其他选项包括在您的中创建app/models它,我喜欢这个想法但从未尝试过,因为它“有效”并且我还有其他要编写的代码:)

于 2020-04-23T10:50:49.410 回答