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)如果我使用数组,有没有办法在视图中调用每个数组记录的属性?
@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)
首先,退后一步.让我们弄清楚你正在尝试做什么.
对我来说,似乎是:查找前五个选项引用的所有事件.
如果您正在尝试这样做,请通过以下方式节省一些时间和查询:
@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#<<来处理这个产生的数组.