Rails 2:使用form_for构建一个覆盖同一类的多个对象的表单
希望对于Rails maven来说这是一个扣篮:
我有一个表格应该迭代一组LineItems
并收集每个。 我试图让form_for
和fields_for
创建正确的字段名称和参数,以给我的控制器一个params散列像
params[:line_items] = { => { :rma_reason => "some string", :rma_qty => 2 } }
我所拥有的是:
.... item.quantity, :size=>3 %> ....
结果HTML看起来像(我猜你会想到的):
然而 ,我想要获得的(并且没有找到除了回到ad-hoc HTML标签之外的任何解决方案)是由line_item.id
索引的字段名称,例如line_item [1928] [rma_qty]。 这将允许我的控制器迭代每个line_item并使用给定的参数更新它。
- …也许在纯REST UI中,表单应绑定到
LineItem
一个实例,标准form_for可以工作 – 但用户应该能够使用一个表单一次提交所有更改。 可能吗?
当您嵌套表单字段时,您必须确保从相应的表单构建器链接fields_for
方法:
<% rma_form.fields_for :line_item, item do |item_f| %>
通过单独调用fields_for
,您打破了form_for
的链,从而破坏了不正确的字段名称。
需要在主窗体帮助器上调用fields_for,并使用magic []
s调用字符串参数,并指示应在[]
s中插入哪个实例的参数
<% rma_form.fields_for "line_item[]", item do |item_f| %>
所以现在我的标签看起来像
这是桃子的。
这个经典的railscast是一个很好的fields_for介绍, 这个评论解释了做我想要的魔术支架的效果 – 除此之外,无法在任何地方找到这个function。