以双嵌套形式提交多个记录时出现未知属性错误

时间:2011-06-06 19:19:08

标签: ruby-on-rails nested-forms nested-form-for

我正在使用nested_form来实现:

父母(攀登)== has_one ==>加入模型(route_ascent)== polymorphic has_many ==>儿童(route_step)

所以我有一个看起来像

的攀爬对象
class Climb < ActiveRecord::Base
  has_one :route_ascent
  accepts_nested_attributes_for :route_ascent
end

这是RouteAscent

class RouteAscent < ActiveRecord::Base
  has_many :ascent_steps, :class_name => 'RouteStep', :as => :steppable
  accepts_nested_attributes_for :ascent_steps, :allow_destroy => true
end

这是RouteStep

class RouteStep < ActiveRecord::Base
  belongs_to :steppable, :polymorphic => true
end

我的Climb表格中有

f.fields_for :route_ascent

我的_route_ascent_fields部分只是

<%= f.fields_for :ascent_steps %>
<p><%= f.link_to_add "Add A Step", :ascent_steps %></p>

我的_ascent_step_fields部分是

<div class="field">
<%= f.label :order %>
<%= f.text_field :position %><br>
<%= f.label :description %>
<%= f.text_area :description %>
<%= f.link_to_remove "Remove Step" %>
</div>

我遇到的问题是,每当我在连接模型的has_many关联中提交包含多个对象的表单时,我都会收到未知属性错误。以下是在这种情况下由表单生成的参数:

"route_ascent_attributes"=>{"ascent_steps_attributes"=>{"0"=>{"position"=>"1",
 "description"=>"this will also work",
 "_destroy"=>"false",
 "id"=>"66"}},
 "0"=>{"new_1307386880995"=>{"position"=>"2",
 "description"=>"broken!",
 "_destroy"=>"false"}},
 "id"=>"4"},

看起来第二个对象没有在参数中正确包含,但我无法弄清楚为什么会这样。

无论has_many关联是否以对象开头,都会出现问题。所以如果它是空的,我可以成功创建一个对象而不是两个。如果它已经有一个对象,我就不能在没有出现此错误的情况下添加第二个对象。

将继续努力解决这个问题,但我很欣赏任何有关问题的见解!

1 个答案:

答案 0 :(得分:0)

从快速浏览一下,似乎第二个ascent_steps_attributes具有与第一个相同的“标识符”“0”。如果您还没有在irb中测试过这个数据,那么这个数据是一个很好的地方,可以看看您是否可以使用此输入创建数据对象。