Ruby/Rails - 使用每个循环迭代/对象与数组向对象添加记录

Chr*_*len 0 ruby arrays hash ruby-on-rails

我试图弄清楚如何为循环的每次迭代向现有对象添加记录.我很难发现对象和数组之间的区别.

我有这个

 @events = Event.find(1)
 @loops = Choices.find(:all, :limit => 5)  #so loop for 5 instances of choice model
 for loop in @loops
       @events = Event.find(:all,:conditions => ["event.id = ?", loop.event_id ])
 end
Run Code Online (Sandbox Code Playgroud)

我正在尝试根据循环变量的id添加新事件到现有的@events对象.但是(=)运算符只是创建了一个@events对象的新实例.

我尝试(+ =)和(<<)作为运算符,但得到了错误

"当你没想到它时,你有一个零对象!你可能已经预料到了一个Array的实例.在评估nil时出错了"

我试过创建了一个数组

 events = []
 events << Event.find(1)
 @loops = Choices.find(:all, :limit => 5)  #so loop for 5 instances of choice model
 for loop in @loops
       events << Event.find(:all,:conditions => ["event.id = ?", loop.event_id ])
 end
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在视图中调用该数组属性

使用对象,我能够在视图中创建一个循环,并调用该对象的所有属性......

<table> 
<% for event in @events %>
<tr>
  <td><%= link_to event.title, event %></td>
  <td><%= event.start_date %></td>
  <td><%= event.price %></td>
</tr>
<% end %>
</table>
Run Code Online (Sandbox Code Playgroud)

我怎么能用数组设置呢?

所以问题是

1)数组和对象之间的区别是什么?
2)有没有办法在每次迭代中添加到现有对象中?
3)如果我使用数组,有没有办法在视图中调用每个数组记录的属性?

yfe*_*lum 5

@events = []
@events << Event.find(1)
@loops = Choices.find(:all, :limit => 5)
for loop in @loops
    es = Event.find(:all, :conditions => ["event.id = ?", loop.event_id])
    for e in es
        @events << e
    end
end
Run Code Online (Sandbox Code Playgroud)


And*_*man 5

首先,退后一步.让我们弄清楚你正在尝试做什么.

对我来说,似乎是:查找前五个选项引用的所有事件.

如果您正在尝试这样做,请通过以下方式节省一些时间和查询:

@choices = Choices.limit(5).include(:event)
Run Code Online (Sandbox Code Playgroud)

这是假设有一个has_{one,many}/ belongs_to两个,其中应该有之间的关联,我想.虽然班级名称很模糊,但我可能会遗漏一些东西.

然后,您可以循环@choices并拉出event与之关联的内容.或者使用类似的东西Enumerable#collect

你可以Event.find(1)使用Array#push或Array#<<来处理这个产生的数组.