У меня есть родитель, у которого несколько детей. Я хочу, чтобы при отправке формы в родительской модели создавался родительский элемент, а в дочерней модели создавалось несколько записей, по одной для каждого дочернего элемента. Когда я пытаюсь отправить, я получаю следующую ошибку:
ActiveRecord::AssociationTypeMismatch in ParentsController#create
Child(#) expected, got Array(#)
Когда я раскомментирую accept_nested_attributes_for: children и меняю f.fields_for: children на f.fields_for: children_attributes, я получаю другую ошибку:
TypeError in ParentsController#create
can't convert Symbol into Integer
Я не понимаю, что мне делать. Я проверил вложенные модели railscasts, но они имели дело с генерацией дочерних полей внутри формы, и то, что я узнал из railscasts, похоже, не сработало. Я хорош, я неправильно делаю свой builder.text_field: cname в моей форме, но я не знаю, как это сделать.
Мой код:
parent.rb
class Parent < ActiveRecord::Base
has_many :children
#accepts_nested_attributes_for :children
attr_protected :id
child.rb
class Child < ActiveRecord::Base
belongs_to :parent
attr_protected :id
_form.html.erb
<%= form_for @parent, :url => { :action => "create" } do |f| %>
<%= f.text_field :pname %>
<%= f.fields_for :children do |builder| %>
<%= builder.text_field :cname %>
<%= builder.text_field :cname %>
<%= builder.text_field :cname %>
<% end %>
<%= f.submit %>
<% end %>
содержание params:
{"utf8"=>"✓",
"authenticity_token"=>"FQQ1KdNnxLXolfes9IGiO+aKHJaPCH+2ltDdA0TwF7w=",
"parent"=>{"pname"=>"Heman",
"child"=>{"cname"=>""}},
"commit"=>"Create"}
params
, содержащий атрибуты для детей, при отправке формы, пожалуйста? Я почти уверен, что вам просто нужно зацикливаться наparams[:children]
, поскольку ваш журнал ошибок сообщает нам, что это массив - person MrYoshiji   schedule 03.07.2013