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 :

Formulaire en plusieurs parties, avec validation


Sujet :

Ruby on Rails

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 171
    Points : 91
    Points
    91
    Par défaut Formulaire en plusieurs parties, avec validation
    Salut,

    je souhaiterais réaliser un formulaire en plusieurs étapes (pour éviter d'avoir un formulaire trop long et pénible à remplir sur une seule page), avec validation des données à chaque étape.

    Comment devrais-je m'y prendre selon vous? Y a-t-il une solution simple en Ajax? En particulier, pour la validation, je ne pourrai pas utiliser la méthode .valid? d'ActiveRecord puisque certains champs manqueront, donc il faudrait que je trouve une méthode alternative...

    Merci d'avance pour vos idées!

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 100
    Points
    100
    Par défaut
    pour le formulaire en plusieurs étapes le toolkit Dojo, propose un Wizard, qui permet justement de faire cela tout en Ajax.
    Autrement pour la validation tu peux le faire en js .... prototype est ton ami, autrement, si tu décides de ne pas le faire en js les validate_{uniqueness, presence, ...}_of dans tes modèles seront parfaits.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Je suis débutant mais je pense que je peux t'aider.

    Dans l’exemple que je te propose, tu dois d’abord valider l’entête d’une commande dans un premier formulaire, avant de passer à la saisie de lignes de commande, dans un second formulaire.

    L’entête et les lignes seront enregistrées ensembles dans des tables ‘commandes’ et ‘lignes’ de la BDD, une fois validées.

    Pour valider ton premier formulaire, tu récupère d’abord dans une table ‘sessions’ ton entête (objet ‘commande’).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session[:commande] = params[:commande]
    Tu appelle ensuite la méthode suivante qui lance valid?( ) sur l’objet ‘@commande’ ; ce qui déclanche les tests ‘validates …’ que tu as défini dans ton fichier commande.rb, mais ce qui n’enregistre pas ton objet dans la base de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def validation_entete
        @commande = Commande.new(session[:commande])
        if @commande.valid?() 
          return true
        else
          return false
        end
      end
    Si la validation est OK, tu bloque en écriture (ou tu n’affiche pas) ton formulaire d’entête et tu affiche ton formulaire de saisie de lignes de commande.

    Si la validation n’est pas bonne :
    - tu récupères ton entête dans session[:commande] ;
    - tu réaffiche ton formulaire d’entête.
    Pour afficher le message d’erreur défini dans l’instruction ‘validates …’ du fichier commande.rb, le formulaire doit contenir l’instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%= error_messages_for 'commande' %>
    REMARQUE : Dans cet exemple, j’ai considéré deux modèles correspondant à deux tables, mais si tu n’as qu’une table, rien ne t’empêche de créer deux modèles (un par formulaire), que tu recopie ensuite dans un seul modèle correspondant à ta table.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 171
    Points : 91
    Points
    91
    Par défaut
    Merci pour ces propositions.
    L'idée de créer deux modèles pour une table ma parait bonne, je n'y avais pas pensé.
    Je ne connais pas bien la validation en js, je vais me renseigner à ce niveau là également. Par contre, j'ai jeté un coup d'oeil concernant Dojo, j'ai pas trouvé le module qui permet de faire ce que je voudrais.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 100
    Points
    100
    Par défaut
    le wizard n'a pas été porté sur la dernière version 1.1.0 de dojo
    source : http://dojotoolkit.org/book/dojo-por...widgets/wizard

    en revanche si tu prends une ancienne version, notamment la 0.4.3 (je l'utilisais il y a 2 ans), le wizard est présent :

    http://download.dojotoolkit.org/

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 171
    Points : 91
    Points
    91
    Par défaut
    Connaitrais-tu une bonne doc, ou un tuto concernant Dojo? En particulier, je cherche de la doc sur ce fameux 'Wizard' dont tu m'as parlé. Je n'ai rien trouvé dans 'The Dojo Book, 0.4' disponible sur le site dojotoolkit....
    Merci d'avance

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 100
    Points
    100
    Par défaut
    alors a dire vrai j'ai pas la doc,
    par contre ici la source :
    Wizard.js

    et ici la démo (dans Layout Widgets/tt en bas --> Wizard) :

    Démo
    il y a la source avec la démo, après pour la doc ...
    ici la doc des layout widget (dont le wizard fait partie), donc c'est pas une doc sur le wizard en particulier mais ca devrait résoudre pas mal de tes problèmes (notemment avec la démo et sa source).

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 171
    Points : 91
    Points
    91
    Par défaut
    Euh... il manque le dernier lien, non? C'était à vrai dire celui qui m'intéressait le plus... Je vais jeter un coup d'oeil à la démo, mais sans doc consistante, je vais avoir du mal à me convaincre de me lancer là dedans...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 100
    Points
    100
    Par défaut
    oui pardon, voila la doc des layout widget :
    layout widget

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 171
    Points : 91
    Points
    91
    Par défaut
    Nickel!

    Encore merci.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 171
    Points : 91
    Points
    91
    Par défaut
    ... j'ai mis 'Résolu' mais ca ne l'est pas tant que ca dans ma tête finalement.

    Dojo sera très bien pour assurer la validation des données en temps réel, mais quelle est la meilleure option pour réaliser un formulaire en plusieurs parties?
    Créer des partials pour chacunes des parties et gérer le tout en Ajax? Comment faire au niveau du controller?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 100
    Points
    100
    Par défaut
    tu peux eventuellement mettre plusieurs div que tu "hide" et "appear" en fonctions des différentes parties du form, un petit lien next qui appelle une fonction en js, verifie les données de ce div, le hide et en fait apparaitre un autre, sur le dernier div a la place de "next" ce sera "finish" :-)
    Le tout bien sur dans un joli form... quand au controller rien ne change.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 171
    Points : 91
    Points
    91
    Par défaut
    Oui, j'y avais pensé, mais j'ai cru lire que ca avait pas mal de désavantages:
    - Google n'aimerait pas trop pendant son pagerank (possibilité de se faire radier si on abuse du display: none!)
    - Les 'screen reader' n'apprécient pas également, même si dans le cas d'un formulaire c'est pas bien grave
    - C'est pas très 'clean' d'envoyer un formulaire plutôt long pour en faire un affichage par parties.

    Donc je vais peut-être plutôt faire ca avec des partials... mais je suis encore dans l'espoir de trouver une solution plus propre.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 100
    Points
    100
    Par défaut
    oui ce moment la tu passes d'une vue à l'autre en passant les field en hidden (si ils sont valides)

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 171
    Points : 91
    Points
    91
    Par défaut
    Je me permets de relancer le sujet pour vous poser une petite question à propos du transfert des données.

    J'ai donc réalisé mon formulaire en plusieurs parties, et actuellement pour conserver toutes les données rentrées au fur et à mesure des différentes parties, je fais appel à une variable de session
    où je stocke mon objet qui se remplit petit à petit.

    Seulement, cette option ne me satisfait pas totalement car je me rends compte qu'il n'y a pas lieu d'utiliser la session pour cela (car l'utilisateur ne sera pas amené à revenir sur ce formulaire, et s'il revient, je voudrais qu'il le trouve vierge) donc je cherche autre chose. Je pourrais passer mes paramètres de formulaire en params à chaque fois, mais ca m'embête car, à chaque étape du formulaire, mon objet Car se remplit et est traité. Or je ne peux le passer en paramètre...

    Avez-vous une idée?

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 100
    Points
    100
    Par défaut
    tu peux peut-être supprimer, ton "car" de la session une fois que le formulaire est validé.

Discussions similaires

  1. Formulaire en plusieurs parties
    Par developpeurpouce dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2009, 15h21
  2. Réponses: 3
    Dernier message: 02/07/2008, 19h08
  3. Formulaire en plusieurs parties ? (avec controle des erreurs)
    Par fabseven dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 04/04/2008, 16h23
  4. Réponses: 4
    Dernier message: 09/08/2007, 10h26
  5. Réponses: 2
    Dernier message: 07/08/2007, 16h24

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