获取模型中当前用户详细信息的好方法是什么?
我在我的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