【问题标题】:How to set whodunnit for paper_trail when creating a new user?创建新用户时如何为paper_trail设置whodunnit?
【发布时间】:2016-01-28 21:31:31
【问题描述】:

paper_trail gem 跟踪版本,并且做得很好。但是,我注意到了一种极端情况。对于大多数对象,如果您已登录,应用程序控制器会设置 whodunnit,然后在该会话期间创建的所有对象都有一个版本,根据登录者记录“whodunnit”。

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

当然,whodunnit在用户记录保存之前是无法知道用户的id的。这个我知道。

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

现在我不知道是谁创建了用户 - 一些批量导入过程,还是用户。

我正在考虑各种解决方案,比如在 Papertrail::Versions 表中翻找该对象并修复 whodunnit,但这似乎很不干净。

有什么建议吗?

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2019-08-11
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多