在迭代我的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的未定义方法`name':NilClass . 但是,如果我将发生错误的行更改为“<%= @items [item.id] .class%>”,则表明该类是Item而不是nil . 此外,如果我硬编码,例如“.jpeg”>“rails正确输出图片 .
2 回答
从我所看到的:
@item
未定义,您可能意味着@items
,在这种情况下,您所做的事情很可能无法帮助您,因为您当前项目的ID与集合中的索引无关 .如果不是复制/粘贴你输入的那个而你确实有
@items
那么,你仍然有问题item.id - 1
不是你的意思 . 你可能意味着:如果你仍然得到它,那么这意味着你的收藏中有nils,你需要:
您已经在
@items
数组上进行迭代,每个项目都在变量item
中 . 但是,不能保证每个项目的.id
属性将对应于@items
数组中的确切位置 . 如果数据库中的每个item
都有不同的.id
,则无法保证@items
数组中甚至包含很多项目 .例如,在这个数组中:
每个项目在
@items
数组中都有索引0
和1
. 但是,尝试通过执行@items[item.id - 1]
找到"previous"项将导致Ruby在@items
数组中的索引4
处查找项目 - 该项目不存在 .each_with_index
将帮助您解决此问题 - 您可以使用它来获取数组中每个项目的实际索引,而不是取决于.id
属性 . 像这样的东西: