Cómo mantener el orden de los atributos anidados cuando se utiliza accept_nested_attributes_for en una aplicación de Rails

Aquí está el modelo padre:

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

Aquí está el modelo anidado:

class TypeWellPhase < ActiveRecord::Base

  belongs_to :type_well
  belongs_to :phase

end

Aquí está el modelo de fase:

class Phase < ActiveRecord::Base
  ... 
  has_many :type_well_phases
  ...
end

Agrego registros anidados en la tabla secundaria (TypeWellPhases) copiando TODOS los registros de mi tabla de fases (modelo de fase) en el controlador del modelo principal como se muestra a continuación:

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

Hago esto porque quiero mantener un orden específico por los campos secundarios que se agregan. La parte del código Phase.order ("id") es para eso ya que la tabla de fases tiene estos registros en un orden específico.

Después de esto, uso los formularios simple_form_for y simple_fields_for helpers como se muestra a continuación en mi formulario parcial:

= 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

Todo funciona como se desee; La mayoría de las veces. Sin embargo, a veces el orden de las filas secundarias en el formulario se confunde después de que se haya guardado. El orden es importante en esta aplicación, por eso hago este pedido explícitamente en el método privado en el controlador.

Estoy usando la gema "capullo" para agregar la eliminación de registros secundarios. No estoy seguro de por qué este orden se confunde a veces.

Lo siento por un post tan largo, pero quería proporcionar todos los detalles pertinentes por adelantado.

Apreciar cualquier punteros.

Bharat