2012-09-29 36 views
1

當我迭代通過我的Items數組時,我試圖打印該項目以及數組中的前一項,但我在這方面遇到了一些困難。我想要打印的每張圖像都與項目名稱相同。 在那裏我得到我的錯誤的代碼如下:Rails未定義的方法`name'爲零:NilClass

<% @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 %> 

它打印出的錯誤:未定義的方法'名」的零:NilClass。但是,如果我將發生錯誤的行更改爲「<%= @items [item.id] .class%>」,則表明該類是一個Item而不是零。此外,如果我硬編碼的數字,如「.jpeg」>「」軌正確輸出圖片。

+1

日誌項目,我敢打賭,有一個零在那裏。您的測試項目[item.id] .class實際上沒有使用正確的數組索引來測試。你可以嘗試items.each_with_index do | item,i |和項目=項目[我]來確認它確實爲零。這是我的猜測。 – digidigo

+0

如果您打印item.class,它會說什麼? –

+0

代碼item.class打印它是一個Item對象(我相信這是@items是一個數組)。 –

回答

2

您已經迭代@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 %> 
+1

感謝您的解釋!我現在明白了爲什麼它不起作用,並修復了它。 –

2

從我所看到的:

@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 %> 
+0

哇。非常感謝!那第一個代碼塊做了竅門!謝謝。 –

+0

沒問題:)接受答案! –

相關問題