如何在Rails中使用“current_user”和devise?

时间:2013-12-02 11:55:50

标签: ruby-on-rails devise

有问题的代码位于文章控制器的创建操作中。 我希望创建的每篇新文章都属于当前登录的用户。

我检查了Articles表中有一个user_id列,两个模型中都有正确的关联语句。

当我尝试提交新文章的表单时,我收到此错误:

undefined method 'article' for nil:NilClass

参考这行代码:

@article = @current_user.article.new(article_params)

我是否错误地使用current_user?如何让新项目属于当前登录的用户?

3 个答案:

答案 0 :(得分:4)

您应该使用current_user方法:

@article = current_user.articles.new(article_params)
在调用@current_user之前,未设置

nil实例变量(因此它的计算结果为current_user)。

答案 1 :(得分:2)

current_user基本上是一个方便的方法/变量,它从会话哈希中获取用户ID并抓取该用户(该用户在该特定请求上处于活动状态)

所以,当你想只在当前用户身上有东西时,只需要调用current_user

然而,有些事情你应该注意

  1. 确保当前用户已登录。 所以请确保在调用current_user.article.new(params)时current_user不为nil,否则会抛出异常

  2. 当您希望某些内容仅限于该特定登录用户时,请务必按照您在问题中的操作进行操作

  3. 如下: current_user.articles代替Article.where(user_id: ...) 这将有助于您避免将来出现问题,并且在某些情况下可能会更快

    和3.我认为它应该是current_user.articles.new(...)

答案 2 :(得分:1)

应该是current_user,而不是@current_user。 current_user是一个方法,而不是实例变量。