我正在尝试使用ActiveRecord回调添加当前用户信息以进行记录,但我不知道如何做到这一点。 我试过Thread.current [:user],但在结果中我看到从另一个用户会话访问了线程值。 我在生产中使用Passanger,但同时我正在使用acts_as_audited来正确获取用户值。 什么是最好/最安全的方法?
答案 0 :(得分:0)
无法从ActiveRecord模型中访问当前用户。这是由于Rails中的关注点分离 - 当前用户和会话是与控制器领域相关的概念。
您需要获取相关数据并将其传递到模型中,以便回调起作用。一种方法是使用访问器方法:
# model
attr_accessor :current_user
def my_callback
# do something with current_user
self.some_attribute = current_user
end
# controller
@model = MyModel.find(params[:id])
@model.current_user = current_user # assuming you have a controller method that does this
@model.save!
您应该将current_user
访问者重命名为有意义:例如。如果您要跟踪博客帖子的作者,请将其称为author
或responsible_user
或其他类似内容,因为current_user
在保存模型后无意义。