如何在Rails中渲染数组

时间:2019-02-14 09:27:53

标签: ruby-on-rails ruby

在我的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">}

如何一一呈现元素?

1 个答案:

答案 0 :(得分:1)

问题在于@rows = {}不分配数组,而是散列。因此,@rows[0] = bar不会将bar存储为数组中的第一个元素,而是将bar存储在哈希中的键下。

只需将您的控制器方法更改为:

def index
  @rows = []

  bar = Bar.new
  bar.id = 1

  @rows << bar

  render "index"
end