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:
<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>
Aquí está el modelo anidado:
<code>class TypeWellPhase < ActiveRecord::Base belongs_to :type_well belongs_to :phase end </code>
Aquí está el modelo de fase:
<code>class Phase < ActiveRecord::Base ... has_many :type_well_phases ... end </code>
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:
<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>
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:
<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>
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