希望这对Rails maven来说是一个扣篮:
我有一个表格应该迭代一组LineItems
并收集每个表格的信息。我试图让form_for
和fields_for
创建正确的字段名称和参数,以便为我的控制器提供一个类似于
params[:line_items] = { <line_item.id> => { :rma_reason => "some string", :rma_qty => 2 } }
我拥有的是:
<% form_for(@object) do |rma_form| %>
<% @order.line_items.each do |item| %>
....
<% fields_for item do |item_f| %>
<%= item_f.text_area :rma_reason %>
<%= item_f.text_field :rma_qty, :value => item.quantity, :size=>3 %>
<% end %>
....
<% end %>
<% end %>
结果HTML看起来像(我猜你会想到的):
<textarea id="line_item_id" name="line_item[id]"></textarea>
<input id="line_item_rma_qty" name="line_item[rma_qty]" size="3" type="text" value="1" />
然而我想要获得的(并且无法找到任何解决方案,而不是回到ad-hoc HTML标记)是由line_item.id
索引的字段名称,例如例如,line_item [1928] [rma_qty]。这将允许我的控制器迭代每个line_item并使用给定的参数更新它。
LineItem
的一个实例,标准form_for可以工作 - 但是用户应该能够一次性提交所有更改形成。有可能吗?答案 0 :(得分:1)
当您嵌套表单字段时,您必须确保从相应的表单构建器链接fields_for
方法:
<% rma_form.fields_for :line_item, item do |item_f| %>
仅通过调用fields_for
,就会打破form_for
链,从而破坏不正确的字段名称。
答案 1 :(得分:0)
需要在主表单帮助程序上调用fields_for,并使用magic []
s调用字符串参数,并指示应在[]
中插入哪个实例的参数
<% rma_form.fields_for "line_item[]", item do |item_f| %>
所以现在我的标签看起来像
<input id="return_authorization_line_item_1070870205_rma_qty" name="return_authorization[line_item][1070870205][rma_qty]" size="3" type="text" value="1" />
是桃子。
这个classic railscast是一个很好的fields_for简介,而this comment解释了魔术支架的效果,它做了我想要的 - 除此之外,无法在任何地方找到此功能。