这是我遇到的错误,我想知道如何解决它。我是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 %>
答案 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 %>