【发布时间】:2013-07-03 17:48:11
【问题描述】:
我有一个有多个孩子的父母。我想要这样当我提交表单时,在父模型中生成一个父模型,并在子模型中创建多个记录,每个子模型一个。当我尝试提交时,我收到以下错误:
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 在我的表单中是错误的,但我不知道正确的方法。
我的代码:
父.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 %>
参数内容:
{"utf8"=>"✓",
"authenticity_token"=>"FQQ1KdNnxLXolfes9IGiO+aKHJaPCH+2ltDdA0TwF7w=",
"parent"=>{"pname"=>"Heman",
"child"=>{"cname"=>""}},
"commit"=>"Create"}
【问题讨论】:
-
您可以在提交表单时发布包含儿童属性的
params吗?我很确定你只需要循环params[:children]因为你的错误日志告诉我们它是一个数组 -
@MrYoshiji 你可能会再次来救我。我已经用参数更新了我的问题。只有一个孩子出现,而且没有显示任何名字。
-
啊,我认得这个...给我一分钟,我发布一个答案,而你可以看看这个非常相似的问题:stackoverflow.com/questions/16919711/…
标签: ruby-on-rails forms parent-child fields-for