在我的Rails应用程序中,我有一个类Bar
和一个控制器FooController
。
class Bar
attr_accessor :id
end
class FooController < ApplicationController
def index
@rows = {}
bar = Bar.new
bar.id = 1
@rows[0] = bar
render "index"
end
end
在视图中,我想这样渲染
<table>
<% @rows.each do |bar| %>
<tr>
<td><%= bar.id %></td>
</tr>
<% end %>
</table>
但是它将引发错误
undefined method `id' for [0, #<Bar:0x00007fc65db33320 @id=1>]:Array
如果我这样渲染:
<%= @rows %>
数组@rows
的原始数据将呈现为:
{0=>#<Bar:0x00007fc65db33320 @id="1">}
如何一一呈现元素?
答案 0 :(得分:1)
问题在于@rows = {}
不分配数组,而是散列。因此,@rows[0] = bar
不会将bar
存储为数组中的第一个元素,而是将bar
存储在哈希中的键下。
只需将您的控制器方法更改为:
def index
@rows = []
bar = Bar.new
bar.id = 1
@rows << bar
render "index"
end