我很难弄清楚为什么表单中的帖子数据没有正确发布。
我必须建模:儿童和父母
以Child的形式我以这种方式嵌套父形式:
<%
parent = (child.parent) ? parent : Parent.new
%>
<%=f.fields_for :parent, parent do |builder| %>
<%= render 'parent_fields', :fp => builder %>
<% end %>
parent_fields表格如下:
<% @all_parents = Parent.all %>
<% parent = fp.object %>
<%= fp.fields_for :parent do |builder| %>
<%= builder.input :parent_id, :as => :select, :label => 'Parent: ', :required => false,
:collection => options_from_collection_for_select(@all_parents, "id", "name", parent.id), :include_blank => '- Select -' %>
<% end %>
发布的数据哈希显示如下:
"parent_attributes"=>{"parent"=>{"parent_id"=>"6"}, "id"=>"36"}
其中36是旧的父ID,6是新的。
当我执行update_attributes时,它不起作用,这是正常的,因为如果哈希将是这样的话,它会起作用:
...
"parent_id" => 6
"parent_attributes"=>{"id"=>"36", ....}
...
我正在研究遗留代码。也可以通过javascript修改数据。这篇文章的目的是确保我写表单的方式是正确的,因为我是嵌套表单的新手。
谢谢
答案 0 :(得分:0)
您可能需要考虑两种可能的情况: 1.孩子需要选择其所属的现有父级。 2.孩子需要创建一个它所属的全新父母。
您似乎要执行#1,选择现有父级。如果是这样,您不需要fields_for
。字段用于创建新关系。
我将向您展示我正在处理的关于学校的应用程序的示例代码,其中学生belongs_to
为年级。
应用/视图/生/ _form.html.erb 强>
<%= form_for @student do |student_form| %>
<%= student_form.text_field :first %>
<%= student_form.text_field :last %>
<%= student_form.collection_select :grade_level_id, GradeLevel.all, :id, :name %>
<%= student_form.submit "Save" %>
<% end %>
现在,使用你的模型(Child和Parent):
应用/视图/儿童/ _form.html.erb 强>
<%= form_for @child do |form| %>
<%= form.text_field :child_name %>
<%= form.number_field :age %>
<%= form.collection_select :parent_id, Parent.all, :id, :name %>
<%= form.submit "Save" %>
<% end %>
请注意,我只是将Parent.all
直接放入collection_select
。无需创建上面的@all_parents
。
修改强>
如果你想每次创建新的父母......
应用/视图/儿童/ _form.html.erb 强>
<%= form_for @child do |form| %>
<%= form.text_field :child_name %>
<%= form.number_field :age %>
<% form.fields_for :parent, @child.parent do |parent_fields| %>
<%= parent_fields.text_field :parent_name %>
<%= form.submit "Save" %>
<% end %>