簡體   English   中英

Rails為nil:NilClass定義的未定義方法“名稱”

[英]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數組中的索引為01 但是,嘗試通過執行@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM