Ruby on rails 3 如何使用字段“u for”获取正确的子ID;父母【】“或;,家长是否使用f.fields|u表示:孩子,孩子?
我正在以一种形式在索引视图中编辑父模型的多个实例,如Railscasts#198。 每个父项都有多个:子项,并接受子项的嵌套属性,如Railscasts 196和197中的属性 如果我尝试将特定子对象传递给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 %>
<% 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[]" %>