![](/img/trans.png)
[英]NoMethodError, undefined method `name' for nil:NilClass -rails 3
[英]Rails undefined method `name' for nil:NilClass
遍歷我的Items數組時,我試圖打印該項目以及該數組中的前一個項目,但是這樣做有些困難。 我要打印的每張圖像都與項目名稱相同。 我收到錯誤的代碼如下:
<% @items.each do |item| %>
<img src="/assets/<%= item.name %>.jpeg" >
//This is where I get my error//
<img src="/assets/<%= @items[item.id - 1].name %>.jpeg" >
<% end %>
它輸出錯誤:nil:NilClass的未定義方法“名稱”。 但是,如果我將發生錯誤的行更改為“ <%= @items [item.id] .class%>”,則表明該類是Item而不是nil。 另外,如果我將數字硬編碼,例如“ .jpeg”>“ rails,則可以正確輸出圖片。
從我可以看到:
@item
沒有定義,您可能是@items
,在這種情況下,您所做的最有可能對您沒有幫助,因為當前項目上的id與集合中的索引無關。
如果您鍵入的不是復制/粘貼,而是在其中確實有@items
,則仍然會item.id - 1
不是您的意思的問題。 您可能是說:
<% @items.each_with_index do |item, i| %>
<% i = i - 1 %>
<img src="/assets/<%= item.name %>.jpeg" >
//This is where I get my error//
<% unless i < 0 %>
<img src="/assets/<%= @items[i].name %>.jpeg" >
<% end %>
<% end %>
而且,如果您仍然可以得到它,則意味着您的收藏夾中沒有指甲,您需要:
<% @items.compact.each_with_index do |item, i| %>
<% i = i - 1 %>
<img src="/assets/<%= item.name %>.jpeg" >
//This is where I get my error//
<% unless i < 0 %>
<img src="/assets/<%= @items[i].name %>.jpeg" >
<% end %>
<% end %>
您已經在@items
數組上進行迭代,並且每個項目都在變量item
。 但是,不能保證每個項目的.id
屬性都將與其在@items
數組中的確切位置相對應。 如果數據庫中的每個item
都具有不同的.id
,則無法保證@items
數組中甚至有很多項目。
例如,在此數組中:
@items = {{id: 5}, {id: 10}}
每個項目在@items
數組中的索引為0
和1
。 但是,嘗試通過執行@items[item.id - 1]
查找“上一個”項目將導致Ruby在@items
數組中的索引4
處查找一個項目-該項目不存在。
each_with_index
將幫助您解決此問題-您可以使用它來獲取數組中每個項目的實際索引,而不必依賴於.id
屬性。 像這樣:
<% @items.each_with_index do |item, index| %>
<img src="/assets/<%= item.name %>.jpeg" >
<img src="/assets/<%= @items[index - 1].name %>.jpeg" >
<% end %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.