我需要制作一个提交记录数组的表单。我正在使用rails 2.3.11并尝试按照这里的一对多部分中的说明进行操作:http://api.rubyonrails.org/v2.3.8/classes/ActionView/Helpers/FormHelper.html
但是当我这样做时,我会收到错误,或者表单只提交数组中的最后一条记录。
这不起作用,因为@query [:filters]是一个数组,所以fields_for会抛出异常:
<% form_for :aquery, @query, :url => {:action => 'index'} do |a| %>
<% a.fields_for :filters, @query[:filters] do |f| %>
<p>
<%= f.select :field, @fields %>
<%= f.select :logic, ["all", "is", "is not", "none"]%>
<%= f.text_field :arg, :size => 30 %>
</p>
<% end %>
<%= submit_tag l(:button_apply) %>
<% end %>
这不起作用,因为它忽略了@query [:filters]的内容,只渲染了一组字段,无论数组有多大:
<% a.fields_for :filters do |f| %>
这不起作用,因为它只会提交数组中的最后一项:
<% form_for :aquery, @query, :url => {:action => 'index'} do |a| %>
<% @query[:filters].each do |filter| %>
<% a.fields_for :filters, filter do |f| %>
<p>
<%= f.select :field, @fields %>
<%= f.select :logic, ["all", "is", "is not", "none"]%>
<%= f.text_field :arg, :size => 30 %>
</p>
<% end %>
<% end %>
<%= submit_tag l(:button_apply) %>
<% end %>
答案 0 :(得分:2)
您需要遍历过滤器并手动执行索引。
<% form_for :aquery, @query, :url => {:action => 'index'} do |a| %>
<% @query[:filters].each_with_index do |filter, i| %>
<% a.fields_for :filters, filter, :index => i do |f| %>
<p>
<%= f.select :field, @fields %>
<%= f.select :logic, ["all", "is", "is not", "none"]%>
<%= f.text_field :arg, :size => 30 %>
</p>
<% end %>
<% end %>
<%= submit_tag l(:button_apply) %>
<% end %>