ActiveRecord回调访问会话数据

时间:2013-02-07 19:08:11

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我正在尝试使用ActiveRecord回调添加当前用户信息以进行记录,但我不知道如何做到这一点。 我试过Thread.current [:user],但在结果中我看到从另一个用户会话访问了线程值。 我在生产中使用Passanger,但同时我正在使用acts_as_audited来正确获取用户值。 什么是最好/最安全的方法?

1 个答案:

答案 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访问者重命名为有意义:例如。如果您要跟踪博客帖子的作者,请将其称为authorresponsible_user或其他类似内容,因为current_user在保存模型后无意义。