He intentado crear un formulario complejo con muchos modelos anidados y hacerlo dinámico. Ahora descubrí que hacer un modelo anidado no es difícil con accept_nested_attributes_for, pero hacerlo anidado y dinámico era aparentemente imposible si había varios modelos anidados.Rails fields_for: child_index option explanation
Me encontré con http://github.com/ryanb/complex-form-examples/blob/master/app/helpers/application_helper.rb que lo hace muy elegantemente. ¿Alguien podría arrojar algo de luz sobre las líneas 13 y 16?
13 form_builder.object.class.reflect_on_association(method).klass.new
y
16 form_builder.fields_for(method, options[:object], :child_index => "new_#{method}") do |f|
De la intuición, la línea 13 crea la instancia de un objeto nuevo, pero ¿por qué tiene que hacer tantas llamadas de método? No pude encontrar ninguna documentación para la opción: child_index en la línea 16. Cuando se crea el formulario, se usa un número muy grande como índice para los nuevos modelos, mientras que los modelos existentes se indexan por su id. ¿Como funciona esto?
¿Cómo sabe Rails qué eliminar en la base de datos si está indexado de 0 a count - 1? Me estoy perdiendo algo. – Timothy
Inserta el campo oculto para cada registro, que contiene su id: ''. Es una buena idea ver la fuente HTML para comprender qué genera Rails. – Voyta
excelente explicación. Gracias. – user938363