Aquí está el modelo padre:Cómo mantener el orden de los atributos anidados cuando se utiliza accepts_nested_attributes_for en una aplicación Rails
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í es el modelo anidado:
class TypeWellPhase < ActiveRecord::Base
belongs_to :type_well
belongs_to :phase
end
Aquí es el modelo de fase:
class Phase < ActiveRecord::Base
...
has_many :type_well_phases
...
end
Agregue registros anidados en la tabla secundaria (TypeWellPhases) copiando TODOS los registros de soy mi fases (Fase modelo) mesa en el controlador del modelo de matriz 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 de los niños que se agregan. La parte del código Phase.order ("id") es para eso dado que la tabla de fases tiene estos registros en un orden específico.
Después de esto yo uso el simple_form_for y simple_fields_for ayudantes como se muestra a continuación en forma parcial mi:
= 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 desea; La mayoría de las veces. Sin embargo, a veces el orden de las filas de Child en el formulario se descompone después de que se ha guardado. El orden es importante en esta aplicación y es por eso que explícitamente hago este orden 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é esta orden se arruina a veces.
Lo siento por una publicación tan larga, pero quería proporcionar todos los detalles pertinentes por adelantado.
Aprecie cualquier apuntador.
Bharat
Gracias por su excelente explicación. Solo tengo una pregunta de seguimiento: ¿cómo supiste esto? Leí y volví a leer la documentación y ni siquiera pude pensar en esto. En otras palabras, enséñame a pescar :) – Bharat
No hay magia, @Bharat. Está en la documentación oficial a la vista. Vaya a http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for y desplácese hacia abajo hasta las palabras "O una colección que se utilizará". – jdoe
me ayudó a resolver mi pregunta su http://stackoverflow.com/questions/13699285/how-to-make-text-fields-for-nested-attributes-in-rails-for-selected-records –