J'ai essayé de créer une forme complexe avec de nombreux modèles imbriqués, et de la rendre dynamique. Maintenant, j'ai trouvé que faire un modèle imbriqué n'est pas difficile avec accept_nested_attributes_for, mais le rendre imbriqué et dynamique était apparemment impossible s'il y avait plusieurs modèles imbriqués. Je suis tombé sur http://github.com/ryanb/complex-form-examples/blob/master/app/helpers/application_helper.rb qui le fait très élégamment. Quelqu'un pourrait-il faire la lumière sur les lignes 13 et 16?Rails fields_for: explication de l'option child_index
13 form_builder.object.class.reflect_on_association(method).klass.new
et
16 form_builder.fields_for(method, options[:object], :child_index => "new_#{method}") do |f|
De l'intuition, la ligne 13 instancie un nouvel objet, mais pourquoi faut-il faire tant d'appels de méthode? Je n'ai trouvé aucune documentation pour l'option: child_index à la ligne 16. Lorsque le formulaire est créé, un très grand nombre est utilisé comme index pour les nouveaux modèles, alors que les modèles existants sont indexés par leur identifiant. Comment cela marche-t-il?
Comment Rails sait-il quoi effacer dans la base de données s'il est indexé de 0 à count - 1? Il me manque quelque chose. – Timothy
Il insère un champ caché pour chaque enregistrement, contenant son id: ''. C'est une bonne idée de voir la source HTML pour comprendre, ce que Rails génère. – Voyta
excellente explication. Merci. – user938363