我正在使用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'
非常感谢任何帮助,谢谢
答案 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
中创建此文件,我喜欢这个想法,但是从未尝试过使它“起作用”,并且我想编写其他代码:)