Как сохранить порядок для вложенных атрибутов при использовании accepts_nested_attributes_for в приложении Rails
Вот родительская модель:
<code>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 </code>
Вот вложенная модель:
<code>class TypeWellPhase < ActiveRecord::Base belongs_to :type_well belongs_to :phase end </code>
Вот модель Phase:
<code>class Phase < ActiveRecord::Base ... has_many :type_well_phases ... end </code>
Я добавляю вложенные записи в дочернюю таблицу (TypeWellPhases), копируя ВСЕ записи из моей таблицы фаз (модель фазы) в контроллер родительской модели, как показано ниже:
<code>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 </code>
Я делаю это потому, что хочу поддерживать определенный порядок с помощью дочерних полей, которые добавляются. Часть кода Phase.order ("id") предназначена для этого, поскольку таблица фаз содержит эти записи в определенном порядке.
После этого я использую помощники simple_form_for и simple_fields_for, как показано ниже в моей части:
<code>= 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 </code>
Все работает как хотелось бы; в большинстве случаев. Однако иногда порядок дочерних строк в форме портится после ее сохранения. Порядок важен в этом приложении, поэтому я явно делаю это в приватном методе контроллера.
Я использую "кокон" драгоценный камень для добавления удаления дочерних записей. Я не уверен, почему этот заказ иногда портится.
Извините за такой длинный пост, но я хотел предоставить все соответствующие детали заранее.
Цените любые указатели.
Бхарат