0

我在我的 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>

最好的方法是什么?

4

2 回答 2

2

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

换句话说,不要做你想做的事。将如何做事的知识放在你的模型中,但将控制谁可以做这些事情放在控制器中。

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

于 2012-12-30T09:07:21.010 回答
-2

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

after_create :create_news
def create_news
 @current_user = self.user
end
于 2012-12-30T08:53:59.590 回答