Rails 2:使用form_for构建一个覆盖同一类的多个对象的表单

希望对于Rails maven来说这是一个扣篮:

我有一个表格应该迭代一组LineItems并收集每个。 我试图让form_forfields_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。