4

我正在使用纸质追踪来审核对数据的更改,并且除了纸质追踪默认存储的“whodunnit”列之外,还希望存储当前用户的 user_id。

我可以轻松修改版本迁移以添加 user_id 列。但是我还没有找到一种简单的方法来从我的应用程序中的各种模型中设置该列。

看起来这应该有效:

has_paper_trail :meta => { :user_id  => current_user.id
                       }

而且,我认为如果我可以访问模型中的 current_user,它可能会起作用。但我没有。在研究了如何在我的模型中访问 c​​urrent_user 之后,我发现这里有一场哲学辩论。不过,这不是我的问题。

所以我正在考虑使用像 sentient_user 或 sentient_model 这样的 gem 来让我访问我的模型中的 current_user,这样我就可以用上面的代码来设置它。

但是,对于我在这里尝试做的小事来说,添加这些宝石似乎很复杂。我想知道是否有更简单的方法。

将采取行动的人的 user_id 添加到版本表中的最简单方法是什么?

4

1 回答 1

3

current_user模型本身不存在,它从控制器中出现。因此,标准方法适用:

class ApplicationController < ActionController::Base
  def user_for_paper_trail
    current_user if user_signed_in?
  end

  def info_for_paper_trail
    { user_id: current_user.id } if user_signed_in?
  end
end

# config/initializers/paper_trail.rb
class Version < ActiveRecord::Base
  attr_accessible :user_id
end
于 2012-07-31T07:01:13.677 回答