Ruby on rails 3 如何使用字段“u for”获取正确的子ID;父母【】“或;,家长是否使用f.fields|u表示:孩子,孩子?

Ruby on rails 3 如何使用字段“u for”获取正确的子ID;父母【】“或;,家长是否使用f.fields|u表示:孩子,孩子?,ruby-on-rails-3,fields-for,Ruby On Rails 3,Fields For,我正在以一种形式在索引视图中编辑父模型的多个实例,如Railscasts#198。 每个父项都有多个:子项,并接受子项的嵌套属性,如Railscasts 196和197中的属性 如果我尝试将特定子对象传递给f.fields\u,如下所示: <% for child in parent.children %> <%= f.fields_for :children, child do |cf| %> <%= cf.text_field :chore %>

我正在以一种形式在索引视图中编辑父模型的多个实例,如Railscasts#198。 每个父项都有多个:子项,并接受子项的嵌套属性,如Railscasts 196和197中的属性

如果我尝试将特定子对象传递给f.fields\u,如下所示:

<% for child in parent.children %>
  <%= f.fields_for :children, child do |cf| %>
    <%= cf.text_field :chore %>
  <% end %>
<% end %>  

我也一样。如果我将方法从:children更改为“[]children”,我将得到

id=“父母\u 1\u孩子\u家务”

它获取正确的父索引,但不为子索引提供数组槽

“[]儿童[]”也不正确: id=“父母\u 1\u孩子\u 3\u家务”

正如我所期待的,属性是0,而不是3

我是否需要直接修改FormBuilder对象的属性或子类FormBuilder来实现此功能,或者是否有适合这种情况的语法


谢谢你的建议。

我确实通过阅读的源代码解决了这个问题

一个可能的答案是:是,修改FormBuilder对象的f.object\u name属性

特别是在这种情况下

f.fields_for :children  
他会打电话来的

f.fields_for_with_nested_attributes
它根据f.object\u name设置name变量。生成的元素的id看起来是基于名称的,因此两者在生成的html中都匹配

def fields_for_with_nested_attributes(association_name, args, block)
      name = "#{object_name}[#{association_name}_attributes]"
.....
因此,告诉f.fields\u for做我想要做的事情的一种方法是设置f.object\u name,在f.fields\u for块的持续时间内包含父id

<% old_object_name = f.object_name %>
<% f.object_name="parents[#{f.object.id}]" %>
<% =f.fields_for :children do |cf| %>
  <%= cf.text_field :chore %>
<% end %>
<% f.object_name=old_object_name #should be "parents[]" %>

那么f.fields\u for块中的所有内容都可以使用标准的rails帮助程序,而无需修改

f.fields_for_with_nested_attributes
def fields_for_with_nested_attributes(association_name, args, block)
      name = "#{object_name}[#{association_name}_attributes]"
.....
<% old_object_name = f.object_name %>
<% f.object_name="parents[#{f.object.id}]" %>
<% =f.fields_for :children do |cf| %>
  <%= cf.text_field :chore %>
<% end %>
<% f.object_name=old_object_name #should be "parents[]" %>