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

我在我的rails应用程序中使用了devise gem进行身份validation。 我想在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 # 

最好的方法是什么?

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

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

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

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

 after_create :create_news def create_news @current_user = self.user end