在具有自己属性的连接表上使用 Accepts_nested_attributes_for - 重复行
我有以下三个模型(Rails 2.3.8)
class Outbreak < ActiveRecord::Base
has_many :incidents, :dependent => :destroy
has_many :locations, :through => :incidents
accepts_nested_attributes_for :incidents, :allow_destroy => true
accepts_nested_attributes_for :locations, :allow_destroy => true, :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
end
class Incident < ActiveRecord::Base
belongs_to :outbreak
belongs_to :location
end
class Location < ActiveRecord::Base
has_many :incidents
has_many :outbreaks, :through => :incidents
accepts_nested_attributes_for :incidents, :allow_destroy => true
end
表单中的参数似乎没问题
"outbreak"=>{ "locations_attributes"=>{"0"=>{"lon"=>"-1.39", "地名"=>"wetwe", "hpu_id"=>"15", "邮政编码"=> ;“so1 1aa”,“region_id”=>“10”,“address_1”=>“”,“town”=>“Bargate”,“address_2”=>“”,“address_3”=> "", "lat"=>"50.89"}},"incidents_attributes"=>{"0"=>{"subtype_id"=>"7", "category_id"=>"1", "详细信息"=>"","subcategory_id"=>"2"}} 但是,
保存爆发后,会在事件表(连接表)中创建 3 行,并在爆发和位置表中创建一行。
事件表中的行未完全从参数填充,如下所示:
id outbreak_id location_id category_id subcategory_id subtype_id detail created_at updated_at
57 23 NULL 1 2 7 2010-11-25 14:45:18.385905 2010-11-25 14:45:18.385905
58 23 27 NULL NULL NULL NULL 2010-11-25 14:45:18.39828 2010-11-25 14:45:18.39828
59 23 27 NULL NULL NULL NULL 2010-11-25 14:45:18.403051 2010-11-25 14:45:18.403051
这一定是由于参数的格式或多个accepts_nested_attributes_for 方法造成的 - 我如何在事件表中仅输入一行并包含所有内容的参数信息?
I have the following three models (Rails 2.3.8)
class Outbreak < ActiveRecord::Base
has_many :incidents, :dependent => :destroy
has_many :locations, :through => :incidents
accepts_nested_attributes_for :incidents, :allow_destroy => true
accepts_nested_attributes_for :locations, :allow_destroy => true, :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
end
class Incident < ActiveRecord::Base
belongs_to :outbreak
belongs_to :location
end
class Location < ActiveRecord::Base
has_many :incidents
has_many :outbreaks, :through => :incidents
accepts_nested_attributes_for :incidents, :allow_destroy => true
end
The parameters from the form seem to be ok
"outbreak"=>{
"locations_attributes"=>{"0"=>{"lon"=>"-1.39", "placename"=>"wetwe", "hpu_id"=>"15", "postcode"=>"so1 1aa", "region_id"=>"10", "address_1"=>"", "town"=>"Bargate", "address_2"=>"", "address_3"=>"", "lat"=>"50.89"}},"incidents_attributes"=>{"0"=>{"subtype_id"=>"7", "category_id"=>"1", "detail"=>"", "subcategory_id"=>"2"}}
}
But when the Outbreak is saved 3 rows are created in the Incidents table (the join table) and a single row in the Outbreak and Location tables.
The rows in the Incidents table are not fully populated from the params as follows:
id outbreak_id location_id category_id subcategory_id subtype_id detail created_at updated_at
57 23 NULL 1 2 7 2010-11-25 14:45:18.385905 2010-11-25 14:45:18.385905
58 23 27 NULL NULL NULL NULL 2010-11-25 14:45:18.39828 2010-11-25 14:45:18.39828
59 23 27 NULL NULL NULL NULL 2010-11-25 14:45:18.403051 2010-11-25 14:45:18.403051
This must be due to the either the format of the parameters or the multiple accepts_nested_attributes_for methods - how do I have just a single row being entered in the Incidents table with all of the parameters information?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
创建操作只需要为 :outbreak 提供的嵌套参数(模型完成工作)。
爆发表格相当长,因此我将其缩减为提到的两个部分(尽管这里可能有更多的属性和字段,超出了了解所需的范围)。
嵌套字段的 HTML 元素 id 的示例可以在 Javascriptobserve_field 帮助器的底部找到。我发表的关于 Nested_attributes_for 部分的 AJAX 更新的帖子也可能有用 AJAX 更新的 Accepts_nested_attributes_for
The create action only needs the nested params provided for :outbreak (the models do the work).
The outbreak form is pretty long so I've cut it down to the two sections mentioned (although there's probably more attributes and fields here than is need to get an idea).
An example of the HTML element id for the nested fields can be found at the bottom in the Javascript observe_field helper. A post I made on AJAX updates of nested_attributes_for partials might also be useful AJAX update of accepts_nested_attributes_for
本周到目前为止,我第二次回答了我自己的问题^^,这将教会我在放弃并在网上发布寻求帮助之前付出更多努力,
但在查看了我原来的问题之后,我没有提供足够的信息正确回答它 - 问题(除了模型的设置)归因于 Outbreak 控制器新方法中的 Outbreak 构造函数,
原始 Outbreaks_controller
修订后的 Outbreaks_controller
对三个模型的更改
这似乎工作正常 - 还发布了创建操作和主要形式
Second time so far this week I've answered my own question ^^ that'll teach me to put more effort in before giving up and posting on the net for help,
Still after looking at my original question I didn't include enough information to answer it properly - the issue (apart from the set up of the models) was down to the Outbreak constructor in the Outbreak controller new method,
Original Outbreaks_controller
Revised Outbreaks_controller
Changes to the three models
This seems to work ok - also posted the create action and main form