获取模型中当前用户详细信息的好方法是什么?

时间:2012-12-30 08:29:05

标签: ruby-on-rails ruby-on-rails-3 mongodb module mongoid

我在我的rails应用程序中使用了devise gem进行身份验证。我想在after_create回调中获得有关当前用户的某些信息。这怎么可能?
我的型号代码是:

class Department
  field :name
  after_create :create_news
  private
  def create_news
    @user = current_user
  end
end

但是当我创建新部门时,我会听到以下错误。

undefined local variable or method `current_user' for #<Department:0x00000005b51648>

最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

rails中的访问控制是在控制器级别完成的,而不是模型级别。因此,rails不提供从模型代码内部访问当前用户,cookie等的机制。如果您愿意,可以通过方法参数将数据传输到模型中。然而,这将忽略业内一些最优秀程序员的设计决策,所以我认为这可能不是一个好的选择。

换句话说,不要做你想做的事。了解如何在模型中执行操作的知识,但是可以控制谁可以在控制器中执行操作。

另一方面,如果您出于某种原因试图存储当前用户,那么您应该通过某种关联(或嵌套文档,因为您使用的是mongo)来实现。在这种情况下,不要在模型中使用current_user,而是在用户上创建attr_accessor,将模型实例上的用户设置为控制器中的current_user,并且然后将它保存在你的回调中。

答案 1 :(得分:-2)

current_user仅适用于控制器和视图。如果您的department模型已连接到user模型,则应添加belong_to关联,并且可以执行类似

的操作
after_create :create_news
def create_news
 @current_user = self.user
end