【问题标题】:NoMethodError in Articles#show ( undefined method `each' for nil:NilClass ) [closed]Articles#show 中的 NoMethodError(nil:NilClass 的未定义方法“每个”)[关闭]
【发布时间】:2021-11-05 15:30:29
【问题描述】:

error

我试图在我的文章博客侧边栏上呈现“最新文章”并收到上述错误,相同的代码在文章索引页面上运行良好,但在显示页面中显示错误。

latest articles partial

下面是我的文章控制器。 articles_controller

【问题讨论】:

  • undefined method 'each' for nil:NilClass 意味着没有方法 each 可以与对象类 Nil 一起使用。它适用于索引方法,因为您在那里传递变量@articles。但是在展示中,您正在传递名为@article 的变量。所以你在 show 方法中的 @articles 变量不存在所以它有一个默认值 nil。

标签: ruby-on-rails ruby postgresql


【解决方案1】:

找到了解决方案,下面的代码对我有用。

<% Article.all.order("created_at Desc").limit(5).each do | article | %>
<%= article.title %>
<% end %>

注意:我同时订购了这篇文章并将其限制为 5 篇,并且它在我的 VIEW 中。

【讨论】:

  • 请注意——这被广泛认为是在视图中执行数据库查询的不好做法。您的视图现在与 Article 模型紧密耦合。
  • 感谢您提供的信息,那么解决此问题的最佳方法是什么,因为 似乎不适合我。
  • 虽然回答您自己的问题是分享知识的好方法,但这为其他人添加了零值,因为问题实际上不包含任何代码并且无法回答。一旦这些指向图像的链接中断,它就完全没有意义了。要么编辑问题直到它真正可以回答,要么完全删除它。
【解决方案2】:

undefined method 'each' for nil:NilClass 表示没有每个方法都适用于 Nil 类的对象。它适用于#index 方法,因为您在那里传递了变量@articles。但是在#show 中,您传递了一个名为@article 的变量。所以你 @articles show 方法中的变量不存在,因此它的默认值为零。您在索引中的代码会遍历所有文章,这就是 each 正在做的事情。但在#show 中,您只想显示一篇文章,因此您应该跳过each 块,并使用类似@article.title 的文章

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 2013-11-14
    • 2013-01-14
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多