我对铁轨上的红宝石很新。我有一个返回一个对象数组的方法。每个对象都有一个具有关联值的属性列表。以下是对象的示例:
#<People id: 1, name: "Person1", age: "10">
在我的控制器中,我将此对象数组作为@array
返回。然后在我的.erb
文件中,我有以下代码行
<% @array.each do |a| %>
<tr><td><%= a.name %></td></tr>
<% end %>
但是当我运行我的代码时,我收到一条错误消息undefined method 'name'
。
我知道name属性在我的数组中,因为在我返回@array
之前我raise @array[0].name
并且出现了正确的名称。
非常感谢任何帮助。
编辑: 不幸的是我不能共享我的控制器或Person类,因为它是专有的,但我可以告诉你输出:
<% @array.each do |a| %>
<tr><td><%= a %></td></tr>
<% end %>
以上输出:
[0, #<People id: 1, name: "Person1", age: "10">]
现在阵列中只有一个对象。希望这会有所帮助。再次感谢任何帮助。
编辑2:我认为这可能与我如何向@array
添加元素有关。
这就是我向@array
添加元素的方式:
for idx in 0 ... @stats.size
@array[idx] = Car.find(@stats[idx])
end
答案 0 :(得分:3)
你的&#34;阵列&#34;不是一个数组,它是一个哈希映射数字到对象。您需要修复控制器,以便生成正确的数组,或使用@array.each do |index, a|
正确迭代哈希。
您创建@array
的行似乎很合适
@array = {} # hash
而不是这样:
@array = [] # array
我怎么知道? {0: 'blah'}.each { |a| p a }
将生成[0, 'blah']
,与第一次迭代生成[0, #<Person...>]
的方式相同。当您使用each
迭代哈希时,它会有效地将哈希从{key: value, key2: value2}
哈希转换为[[key, value], [key2, value2]]
嵌套数组,并将每个子数组splats到块中。由于您的块只接受一个参数,因此[key, value]
数组不会被展开,并且您都会在a
中传入。
这就是您通常使用hash.each { |key,value|
迭代哈希的原因。