ruby on rails - Problem with Array.shift



从我的控制器中,我传递了两个实例变量@events = Event.all@images = Images.all。在视图中,我首先遍历@events.each do |event|,在此块中是行img = @images.shift,但是当我尝试访问任何img方法(例如img.filename)时,我收到一个错误,img nil但我已检查并确定@images已正确填充。如果我只是输出img.class我会收到正确的类,Image,但无法访问它的任何方法。

我做错了什么,或者为什么这种从数组中提取实例的方式不正确?

我知道还有其他方法可以解决这个问题,但这个具体问题让我感到困惑,我真的很想了解为什么这不起作用。谢谢。

#Structure of the model is
Image
-filename :string
-date     :datetime
-caption  :text
-source   :string
#Controller
def index
  @events = Event.all
  @images = Image.all
end
#index.html.erb
<% @events.each do |event| %>
  ... code that works ...
  <% if count==1%>
    <% img = @images.shift %>
    <div><%= img.filename %></div>
  <% end %>
<% end %>
#For testing purposes I changed
<% img = @images.shift %>
<div><%= img.class %></div>
#output is Image

当事件多于图像时,可能会出现此问题。因为每次迭代通过数组@events时,@images都会移动并从数组中获取下一个元素。因此,例如,当您@events中有 4 个元素而@images中只有 3 个元素时,在第 4 次迭代中,从@images中获取第 4 个元素,这就是nil

有两种

情况,Array#shift 的返回值变为 nil

  1. 数组最左边的元素是 nil
  2. 数组为空 (= [] )。

可能是其中两种情况。

相关内容

  • 没有找到相关文章

最新更新