我在我的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>
最好的方法是什么?
答案 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