这是父模型:
class TypeWell < ActiveRecord::Base
...
has_many :type_well_phases, :dependent => :destroy
accepts_nested_attributes_for :type_well_phases, :reject_if => lambda { |a| a[:phase_id].blank? }, :allow_destroy => true
...
end
这是嵌套模型:
class TypeWellPhase < ActiveRecord::Base
belongs_to :type_well
belongs_to :phase
end
这是阶段模型:
class Phase < ActiveRecord::Base
...
has_many :type_well_phases
...
end
我通过从父模型控制器中的阶段(阶段模型)表中复制所有记录来在子表(TypeWellPhases)中添加嵌套记录,如下所示:
class TypeWellsController < ResourceController
...
def new
@new_heading = "New Type Well - Computed"
@type_well = TypeWell.new
initialize_phase_fields
end
private
def initialize_phase_fields
Phase.order("id").all.each do |p|
type_well_phase = @type_well.type_well_phases.build
type_well_phase.phase_id = p.id
type_well_phase.gw_heat_value = p.gw_heat_value
end
end
...
end
我这样做是因为我想通过添加的子字段保持特定的顺序。代码 Phase.order("id") 的一部分就是为此,因为阶段表具有特定顺序的这些记录。
在此之后,我使用 simple_form_for 和 simple_fields_for 帮助器,如下所示在我的部分表单中:
= simple_form_for @type_well do |f|
...
#type_well_phases
= f.simple_fields_for :type_well_phases do |type_well_phase|
= render "type_well_phase_fields", :f => type_well_phase
一切都按预期工作;大部分的时间。但是,有时表单中子行的顺序在保存后会变得混乱。顺序在此应用程序中很重要,这就是为什么我在控制器的私有方法中明确执行此排序的原因。
我正在使用“茧”宝石添加删除子记录。我不确定为什么这个订单有时会搞砸。
很抱歉这么长的帖子,但我想预先提供所有相关的细节。
感谢任何指针。
巴拉特