Rob*_*Rob 7 ruby-on-rails paper-trail-gem
paper_trail gem跟踪版本,并且做得很好.但是,我注意到有一个边缘情况.对于大多数对象,应用程序控制器会在您登录时设置whodunnit,然后在该会话期间创建的所有对象都具有根据登录者记录"whodunnit"的版本.
有趣的情况是没有人登录,因为新用户正在注册.用户使用"nil"whodunnit创建,这是错误的,因为实际上用户是由他们自己创建的.
当然,在保存用户记录之前,whodunnit无法知道用户的id.我知道这个.
但是,这会在以后产生冲突,因为各种批处理作业也会修改用户记录,而不是在Web会话中,也会创建具有nil whodunnit记录的版本.
现在我无法分辨谁创建了用户 - 某些批量导入过程或用户.
我正在考虑各种解决方案,比如可能围绕Papertrail :: Versions表搜索该对象并修复whodunnit,但这看起来非常不洁净.
有什么建议?
您可以在控制器上的创建操作中强制执行侦探小说。
before_filter :only => [:create] do
PaperTrail.request.whodunnit = "Public User"
end
Run Code Online (Sandbox Code Playgroud)
如果您坚持在版本表中包含用户 ID,您可以这样做:
ActiveRecord::Base.transaction do
@user.save!
@user.versions.last.update_attributes!(:whodunnit => @user.id)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2430 次 |
| 最近记录: |