Ruby on rails Array.shift的问题

Ruby on rails Array.shift的问题,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我正在从我的控制器传递两个实例变量@events=Event.all和@images=images.all。在视图中,我首先遍历@events.each do | event |,在这个块中是行img=@images.shift但是当我尝试访问img的任何方法时,例如img.filename我得到一个错误,img是nil,但我已经检查并确定@images已正确填充。如果我只是输出img.class,我会收到正确的类Image,但无法访问它的任何方法 我做错了什么,或者为什么这种从数组中提取实例的

我正在从我的控制器传递两个实例变量
@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
#模型的结构是
形象
-文件名:字符串
-日期:日期时间
-标题:文本
-资料来源:string
#控制器
def索引
@events=Event.all
@images=Image.all
结束
#index.html.erb
... 有效的代码。。。
#为了测试的目的,我改变了
#输出为图像

数组#shift
的返回值变为
nil
时,有两种情况

  • 数组最左边的元素是
    nil
  • 数组为空(
    []

  • 这可能是两种情况之一。

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

    ,您能否将其重新格式化为包含一小段示例代码,而不是一段中的一堆代码段?它的可读性很好,当你所有的图像都被移动后,它可能会返回
    nil
    ?我支持@nash的评论,这肯定是正确的:@images=images.all?你的模特叫什么名字#当数组为空时,shift可以返回nil。我将
    @images.shift
    放在
    块中,除非@images.empty?
    块,它工作正常。伙计,我觉得自己很愚蠢。再次感谢您的回复。
    @images
    是一组
    Image
    实例<代码>图像不是
    数组
    的子类。