Rails接受多个表单的嵌套属性

时间:2016-09-12 09:48:45

标签: ruby-on-rails ruby forms activerecord

我有两个模特,父母和孩子。我希望,当我使用表格创建父母时,为他创造孩子。我有以下内容:

parent.rb

class Parent < ActiveRecord::Base
  has_many :children

  accepts_nested_attributes_for :children
end

child.rb

class Child < ActiveRecord::Base
  belongs_to :parent
end

_form.rb

<%= form_for Parent.new do |f| %>
  <%= f.label :first_name %>
  <%= f.text_field :first_name %></br>
  <%= f.label :last_name %>
  <%= f.text_field :last_name %></br>
  <%= f.label :email %>
  <%= f.text_field :email %></br>
  <%= f.label :phone %>
  <%= f.text_field :phone %></br>

  <%= f.fields_for Child.new do |builder| %>
      <%= builder.label :first_name %><br>
      <%= builder.text_field :first_name %><br>
  <% end %>

  <%= f.fields_for Child.new do |builder| %>
      <%= builder.label :first_name %><br>
      <%= builder.text_field :first_name %><br>
  <% end %>

  <%= f.submit %>


<% end %>

我希望能够在创建父母的同时为他创建一个或多个孩子。如果我提交此表单,我会收到消息Unpermitted parameter: child

同样在我的params哈希中,当我提交此表单时,我只获得最后一个孩子表单中的孩子的信息。如何解决这个问题?

这是我的params许可方法:

params.require(:parent).permit(:first_name, :last_name, :email, :phone, child:{})

1 个答案:

答案 0 :(得分:0)

您以错误的方式允许儿童属性,请使用此:

params.require(:parent).permit(:first_name, :last_name, :email, :phone, children_attributes: [:first_name])