IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

Ajout dynamique de champ dans un formulaire


Sujet :

Ruby on Rails

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Ajout dynamique de champ dans un formulaire
    J'ai un formulaire avec plusieurs champs avec le champ enfant qui peut être ajouter autant de fois que veut l'utilisateur via un lien :
    #vue personne.rhtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <% form_tag :action => "ajout" do %>
        <p id="nom">Nom : <%=text_field("personne", "nom") %></p>
        <p id="prenom">Prenom : <%=text_field("personne", "prenom") %></p>
        <%= render :partial => "enfant"%>
        <p id="unautreenfant"><%= link_to_remote("un autre enfant...", :url => {:action => "addEnfant"})%></p>
        <%= submit_tag("Enregistrer") %>
    <% end %>
    fichier enfant.rhtml utilisé par le render :partial
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p id="enfant">Enfant : <%=text_field("personne", "enfant") %></p>
    controller
    fichier addEnfant.rjs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    page.insert_html :before, 'unautreenfant', :partial => 'enfant'
    Jusque là, mon formulaire s'affiche parfaitement.
    Le problème vient au submit. Impossible de récupérer toutes les valeurs des champs enfants.
    Pour moi, le problème vient de la non différentiation des id de ces champs. Ils ont tous personne_enfant comme id.
    Donc dans mon params je n'obtient qu'une entrée dans mon tableau personne avec la valeur du premier champ enfant. Les autres passent à la trappe.

    Comment puis je distinguer ces id ? Par numérotation ? Je ne trouve pas.

    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    c'est effectivement un problème d'id.

    Je tenterai bien quelque-chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      def index
        @id_champ = nom_fichier = Digest::SHA1.hexdigest( Time.now.to_s.split(//).sort_by {rand}.join )
      end
     
      def addEnfant
        @id_champ = nom_fichier = Digest::SHA1.hexdigest( Time.now.to_s.split(//).sort_by {rand}.join )
      end
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p id="enfant">Enfant : <%=text_field("personne", "enfant[#{@id_champ}]") %></p>
    tu pourra récupérer tout tes champs "personne_enfant", puis faire un each dessus
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    pourquoi tu utilises pas form_for au lieu de form_tag
    tu n'aurais pas ce problème

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Form_for
    Là je ne vois pas ??

  5. #5
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    C'est une idée, tu pourrais utilisé form_for et fields_for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <% form_for :personne, @personne, :url => {:action => ajout' } do |f| -%>
       <%= f.text_field :nome %>
         <% @personne.enfants.each do | enfant | %>
          // les enfants
        <% end -%> 
    <% end -%>
    <%= link_to_remote("un autre enfant...", :url => {:controller => "enfant", :action => "create", :id => @personne)%></p>
        <%= submit_tag("Enregistrer") %>
    <% end -%>
    J'aurais ajoutée un méthode create dans controller enfant. Dans celui ci je crée un objet enfant mais je ne le sauvegarde pas

    Dans le RJS j'aurais remplacé page.insert_html par un replace
    il faudrait que tu passes dans ton partiel ton objet personne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    page.replace_html :before, 'unautreenfant', :partial => @personne
    dans ton partiel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     <% @personne.enfants.each do | enfant | %>
    <% fields_for 'enfants[' enfant.id.to_s + ']',enfants do |i| -%>
            <%= i.text_field :name %>
    <% end -%> 
    <% end -%>

    C'est une idée, y a surement meilleur

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Merci pour votre aide.
    J'ai trouvé en propageant une variable à travers les différents fichiers.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/02/2013, 16h39
  2. [2.x] Création dynamique de champs dans un formulaire
    Par rafleboss dans le forum Symfony
    Réponses: 13
    Dernier message: 08/11/2011, 10h35
  3. [1.x] EmbedForm et ajout dynamique de champ dans une formulaire.
    Par Noobboy dans le forum Symfony
    Réponses: 6
    Dernier message: 10/08/2011, 15h03
  4. Ajout dynamique d'input dans un formulaire
    Par Nappo dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 26/12/2009, 11h47
  5. ajout dynamique de contrôle dans un formulaire
    Par celiaaa dans le forum IHM
    Réponses: 2
    Dernier message: 26/02/2007, 19h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo