有问题的代码位于文章控制器的创建操作中。 我希望创建的每篇新文章都属于当前登录的用户。
我检查了Articles表中有一个user_id列,两个模型中都有正确的关联语句。
当我尝试提交新文章的表单时,我收到此错误:
undefined method 'article' for nil:NilClass
参考这行代码:
@article = @current_user.article.new(article_params)
我是否错误地使用current_user?如何让新项目属于当前登录的用户?
答案 0 :(得分:4)
您应该使用current_user
方法:
@article = current_user.articles.new(article_params)
在调用@current_user
之前,未设置 nil
实例变量(因此它的计算结果为current_user
)。
答案 1 :(得分:2)
current_user基本上是一个方便的方法/变量,它从会话哈希中获取用户ID并抓取该用户(该用户在该特定请求上处于活动状态)
所以,当你想只在当前用户身上有东西时,只需要调用current_user
然而,有些事情你应该注意
确保当前用户已登录。
所以请确保在调用current_user.article.new(params)
时current_user不为nil,否则会抛出异常
当您希望某些内容仅限于该特定登录用户时,请务必按照您在问题中的操作进行操作
current_user.articles
代替Article.where(user_id: ...)
这将有助于您避免将来出现问题,并且在某些情况下可能会更快
和3.我认为它应该是current_user.articles.new(...)
答案 2 :(得分:1)
应该是current_user
,而不是@current_user
。
current_user是一个方法,而不是实例变量。