如何在创建新用户时为paper_trail设置whodunnit?

时间:2016-01-28 21:31:32

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

paper_trail gem跟踪版本,并且做得很好。但是,有一个我注意到的边缘情况。对于大多数对象,应用程序控制器会在您登录时设置whodunnit,然后在该会话期间创建的所有对象都具有记录" whodunnit"根据谁登录。

有趣的情况是没有人登录,因为新用户正在注册。使用" nil"创建用户。 whodunnit,这是错误的,因为实际上用户是由他们自己创建的。

当然,在保存用户记录之前,whodunnit无法知道用户的ID。我知道这一点。

但是,这会在以后产生冲突,因为各种批处理作业也会修改用户记录,而不是在Web会话中,也会创建具有nil whodunnit记录的版本。

现在我无法告诉谁创建了用户 - 某些批量导入过程或用户。

我正在思考各种解决方案,比如可能围绕Papertrail :: Versions表搜索该对象并修复whodunnit,但这看起来非常不洁净。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以在控制器上的创建操作中强制执行whodunnit。

before_filter :only => [:create] do
  PaperTrail.whodunnit = "Public User"
end

如果您坚持在版本表中使用用户ID,则可以执行以下操作:

ActiveRecord::Base.transaction do
  @user.save!
  @user.versions.last.update_attributes!(:whodunnit => @user.id)
end