2015-10-19 72 views
0

我有一些困難,要弄清楚爲什麼表單中的發佈數據沒有正確發佈。belongs_to嵌套形式的關聯不能正確發佈數據

我不得不型號:孩子和家長

在孩子我在這樣嵌套母的形式形式:

<% 
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是舊的父母身份證,6是新的身份證。

當我做update_attributes方法不起作用這是正常的,如果哈希會是這樣的方式,因爲它的工作:

...  
"parent_id" => 6 
"parent_attributes"=>{"id"=>"36", ....} 
... 

我工作的遺留代碼。數據也可能被javascript修改。這篇文章的目的是爲了確保我寫這個表單的方式是正確的,因爲我是嵌套表單的新手。

謝謝

回答

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 %> 

現在,使用您的模型(小孩和父母):

應用程序/視圖/兒童/ _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 %> 
+0

我知道這對於parent_id是有效的。你如何設法編寫父母的其他領域。說父母有字段:field1和field2,你想使用child.update_attributes更新。爲了清楚起見,我只需要表單,因爲在控制檯中適用於我(這意味着模型已正確設置)。 –

+0

讓我知道那是如何工作的。 fields_for'的其他文檔在這裏:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for –