如何修复rails中的错误

时间:2017-06-16 02:17:27

标签: ruby-on-rails ruby

这是我遇到的错误,我想知道如何解决它。我是rails的新手,我不认为.each是一种方法。如果有人可以请求帮助我,那将是非常令人沮丧的。感谢

  

未定义的方法`each'代表nil:NilClass

这是我收到错误的代码。

<h1>Portfolio Items</h1>

<% @portfolio_items.each do |portfolio_item| %>
  <p><%= portfolio_item.title %></p>
  <p><%= portfolio_item.subtitle %></p>
  <p><%= portfolio_item.body %></p>
  <%= image_tag portfolio_item.thumb_image unless portfolio_item.thumb_image.nil? %>
<% end %>

6 个答案:

答案 0 :(得分:1)

欢迎来到SO。

您没有设置var @portfolio_items或其拼写错误。 如果您已定义它,那么至少它应该具有Array类似的数据结构并防止此错误。

某些类似对象的数组将为ActiveRecord::Associations::CollectionProxy

  

在ruby undefined中,@ instance vars设置为nil并且不会引发错误。

如果这没有帮助,请更新您的问题并提供更多详细信息,我将更新此答案。

答案 1 :(得分:1)

如果你这样做:

[nil].each{|e| p e}
=> nil

你可以看到数组中有一个元素,所以你可以使用each,你可以迭代并打印它的内容,你就会看到那里的{{1}里面的值。

另一方面,如果你写:

nil

您将收到错误:

nil.each{|e| p e}

要说明可以应用于undefined method `each' for nil:NilClass (NoMethodError) 的所有方法之间没有each方法。

在您的代码中,您最有可能在控制器中定义nil,但出于某种原因,这并不是取得您想要的价值,而是获得{ {1}}值,因此当您尝试迭代它时,您会收到该错误。

答案 2 :(得分:1)

您的代码期望@portfolio_items是一个数组,但@portfolio_items未在控制器操作中分配值或指定了nil。

答案 3 :(得分:1)

您的列表为nil,您可以执行if...else检查以在视图模板上处理

<h1>Portfolio Items</h1>

<% if @portfolio_items.count == 0 %>
  <p>There are no items</p>
<% else %>
  <% @portfolio_items.each do |portfolio_item| %>
    <p><%= portfolio_item.title %></p>
    <p><%= portfolio_item.subtitle %></p>
    <p><%= portfolio_item.body %></p>
    <%= image_tag portfolio_item.thumb_image unless portfolio_item.thumb_image.nil? %>
  <% end %>
<% end %>

答案 4 :(得分:1)

您可以尝试使用:

(@portfolio_items || []).each do |portfolio_item|

答案 5 :(得分:1)

实例变量@portfolio_items为零,each循环nil是抛出错误。

请遵循以下代码:

<h1>Portfolio Items</h1>

<% if @portfolio_items.nil? %>
  No Item to display.
<% else %>
  <% @portfolio_items.each do |portfolio_item| %>
    <p><%= portfolio_item.title %></p>
    <p><%= portfolio_item.subtitle %></p>
    <p><%= portfolio_item.body %></p>
    <%= image_tag portfolio_item.thumb_image unless   portfolio_item.thumb_image.nil? %>
  <% end %>
<% end %>