Rails,对象数组形成

时间:2013-09-19 11:46:39

标签: ruby-on-rails ruby-on-rails-3

我正在开发一个rails应用程序。

我希望用户能够在模型数组之间进行选择

在一个控制器中,我创建了一个模型数组。

def myController
 @data = []
 @data += [MyData.find(2)]
 @data += [MyData.find(5)]
 @data += [MyData.find(7)]
end

在视图中,我无法使用form_for,因为无法在数组中使用,所以我有:

<%= form_tag 'myOp' do |f|%>
 <%= fields_for :test, @data do |builder|%>
  <%= render 'sub_form', :f => builder %>
 <% end %>
<% end %>

现在在sub_form中,我想收到数组的每个项目,但相反,我得到了完整的数组。

如何获取子表单中数组的每个项目?

有更好的方法吗?

由于

2 个答案:

答案 0 :(得分:2)

首先在你的控制器中

def my_action
    @datas = MyData.find(2, 5, 7)
end

然后在您的视图中

您需要遍历@datas数组并为每个对象生成字段。这是因为fields_for只为一个对象生成字段,而不是对象数组。

<%= form_tag 'myOp' do |f|%>
    <% @datas.each_with_index do |data, i| %>
        <%= fields_for "test_#{i}", data do |builder|%>
            <%= render 'sub_form', :f => builder %>
        <% end %>
    <% end %>
<% end %>

答案 1 :(得分:0)

我希望这会纠正这个问题:

<%= form_tag 'myOp' do |f|%>
 <%= fields_for :test, @data.each do |builder|%>
  <%= render 'sub_form', :f => builder %>
 <% end %>
<% end %>

通常,可以使用 .each 方法分隔数组对象。也许这也适用于此。试试吧。