Ouverture de session

Commentaires récents

Syndication
Flux XML

Mise à jour formulaire dynamique

Mise à jour formulaire dynamique
Posté par didarp le Mercredi, 25 Mars, 2009 - 8:16pm. Développement

Bonjour,

J'ai un modèle Customer qui :has_many :addresses, :through => :offices
Sous Rails 2.3.2, j'utilise les modèles imbriqués avec un truc du style accepts_nested_attributes_for :addresses ....

J'ai donc créé un formulaire qui permet d'ajouter de nouvelles adresses à un client, en utilisant une requête link_to_remote qui invoque une action du contrôleur qui met à jour un objet DOM (TBODY en l'occurrence) de la page du formulaire à l'aide d'un partiel. Ce même partiel est aussi utilisé par la vue du formulaire pour afficher les champs adresses figurant déjà dans la base.

Les champs d'adresses sont générés avec un fields_for :addresses ...

Lorsque j'ajoute un champ d'adresse en cliquant sur le lien généré par le link_to_remote, le formulaire affiché est effectivement modifié et je peux constater que le DOM l'est aussi à l'aide de Dom Inspector (add-on Firefox). Par contre, la page source html n'est pas modifiée.

Quoi qu'il en soit, le post du formulaire modifié (ajout d'un ou plusieurs champs d'adresse) génère un :params contenant tous les champs du formulaire, à l'exception notable de ceux imbriqués dans le tag TBODY mis à jour vian DOM.

A noter que tant qu'on ajoute pas de champs au formulaire par défaut (pas d'ajout de champs d'adresses supplémentaires) tout est OK.

Quelqu'un aurait-il une idée.
D'avance, un grand merci.



[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | sujet précédent | sujet suivant | envoyer par email ]

Options d'affichage des commentaires
Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder" pour activer vos changements.

Sujet: 
ids et names des champs imbriqués ?
Auteur: 
jasperiel
Date: 
Mer, 25/03/2009 - 21:50

Salut,

il y a parfois ce genre d'erreur, particulièrement quand il y a un conflit sur plusieurs INPUTS. Rails utilise l'attribut "name" et s'il y en a deux identiques ça fait tout foirer.

Je ne sais plus si les NAMEs sont bien faits sur les *nouveaux* éléments dans un fields_for mais si ça se trouve c'est le problème. S'ils sont identiques, trouve une astuce (en AJAX ou en pur JS) pour les différencier, juste après insertion ou juste avant l'envoi.

Comme dit il y a 2 semaines dans un commentaire, j'utilise une norme perso "parent[id_parent][nom_association][id_enfant][champ]" : quand je génère de nouveaux inputs pour de nouveaux enfants, je compte en négatif les "id_enfants" (j'ajoute un underscore), et mon contrôleur le repère afin de créer l'objet (je n'utilise pas encore Rails 2.3.2).

Ici, mes NAMEs seraient donc de la forme "customer[5][addresses][_1][city]".
Pour le compteur, je garde une variable JS qui s'incrémente. Tu peux aussi le deviner à partir du DOM, mais franchement ça devient pénible pour pas grand-chose.

Si ton problème persiste, est-ce que tu pourrais noter les IDs et les NAMEs de tes INPUTs avec DOM Inspector et les poster ici ? Merci beaucoup.

PS : sur les conflits de params, le souci c'est que le conflit se fait lors de la réception de la requête par Rails, même dans tes logs tu ne vois pas les paramètres "de départ" (sauf astuce, je ne sais pas s'il y en a mais si oui j'ai oublié).

Bon courage !


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
ids et names des champs imbriqués ?
Auteur: 
didarp
Date: 
Ven, 27/03/2009 - 10:09

Bonjour,

Ok, je vais essayer tout ça.
Ce pourrait être un truc dans ce genre là, peut-être du au fait que, quand je reconstruis le contenu du tag TBODY avec les champs déjà présents dans la base, plus le nouveau champ ajoputé via ajax, je ré-ouvre un contexte pour l'objet père et les fils (adresses).
Cette question de réouvrir le contexte d'un formulaire en réponse à une requête ajax avait déjà été évoquée dans le post de Michael Koziarski (Nested Model Forms), mais sans donner de réponse précise sur le sujet.
A+


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Nouveaux liens

Qui est en ligne
Il y a actuellement 1 utilisateur et 19 invités en ligne.

railsfrance.org - communauté francophone des utilisateurs de Ruby on Rails
[ Propulsé par Drupal ]