如何使用fields_for“ parents []”获得正确的孩子ID,父母做| f |。使用f.fields_for:children,child?
|
我正在以一种形式在索引视图中编辑父模型的多个实例,如Railscasts#198中所示。
每个父母都有has_many:children和accepts_nested_attributes_for:children,如Railscasts#196和#197
<%= form_tag %>
<% for parent in @parents %>
<%= fields_for \"parents[]\", parent do |f|
<%= f.text_field :job %>
<%= f.fields_for :children do |cf| %>
<% cf.text_field :chore %>
<% end %>
<% end %>
<% end %>
<% end %>
给定parent.id == 1
f.text_field:job正确生成
<input id=\"parents_1_job\" type=\"text\" value=\"coding\" size=\"30\" name=\"parents[1][job]\">
但是cf.text_field:chore生成没有父级索引的ID和名称。
id=\"parents_children_attributes_0_chore\"
name=\"parents[children_attributes][0][chore]\"
如果我尝试将特定的子对象传递给f.fields_for,如下所示:
<% for child in parent.children %>
<%= f.fields_for :children, child do |cf| %>
<%= cf.text_field :chore %>
<% end %>
<% end %>
我也一样如果将方法从:children更改为\“ [] children \”,我会得到
id = \“ parents_1 ___ children_chore \”
它获得正确的parent_index,但不为子索引提供数组槽。
\“ []儿童[] \”也不正确:
id = \“ parents_1__children_3_chore \”
如我所期望的,属性_0_chore而不是3_chore。
我是否需要直接修改FormBuilder对象的属性或FormBuilder的子类以使其起作用,或者是否有适合这种情况的语法?
感谢您的任何想法。
没有找到相关结果
已邀请:
1 个回复
慷祈霖黑
要打电话
它基于f.object_name设置名称变量。所生成元素的id看起来像是基于名称的,因此两者在结果html中都匹配。
因此,告诉f.fields_for做我想要的事情的一种方法是设置f.object_name以在f.fields_for块的持续时间内包含父ID。
然后,f.fields_for块中的所有内容都可以使用未修改的标准rails助手。