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 :

gestion des erreurs (validation de formulaires)


Sujet :

Ruby on Rails

  1. #1
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut gestion des erreurs (validation de formulaires)
    Bonjour,

    Je n'arrive pas à gérer les erreurs après validation de formulaires ... Pourtant, ca semble si simple.
    Selon les tutoriels que j'ai pu voir, il suffit de mettre dans le model approprié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    validates_presence_of obj, :message=>"le message d'erreur"
    Ce que j'ai fait ...

    Quand je soumet le formulaire vide, en effet, l'insertion dans la table représentant le modele ne se fait pas, mais je n'arrive pas a récupérer le message d'erreur.

    Qu' ai je oublié ?


    Un débutant qui souhaire comprendre

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Points : 84
    Points
    84
    Par défaut
    il faut que tu place:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%= error_messages_for 'nom_de_lobjet_creé_par_le_formulaire' %>
    dans ta vue à la l'endroit ou tu veux voir apparaître les erreurs.

  3. #3
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    Merci de ta réponse,

    le error_messages_for 'objetcreeparformulaire', ne m'affiche toujours rien.

    Cependant, j'ai fait quelques tests. J'arrive a récupérer l'erreur en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    unless @objetcreeparformulaire.errors.empty?
          @objetcreeparformulaire.errors.each { |attr, msg|
            aff += "#{attr} - #{msg} <br />"
          }
          render :text=>aff
    end
    Est ce que c'est important si la vue ou je veux afficher l'erreur, ne correspond pas a l'action du controlleur qui créé l'objet.

    En gros :
    j'ai une vue afficher_messages.rhtml ou il y a le formulaire
    et dans mon controlleur, j'ai une action creer_message (qui récupère les donnée du formulaire et enregistre dans la BD) et qui fait un redirect_to :action=>"afficher_messages" à la fin...

    Espérons que je sois clar

  4. #4
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    C'est bien ce que je craignais ... En enlevant le redirect_to et en affichant le message d'erreur dans la vue de l'action creer_message, ca marche bien !

    Mais c'est pas vraiment ce que je veux ... Donc faut que je revois l'enchainement des actions de mon controlleur ...

    Rha ce que j'aime pas débuter

  5. #5
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    J'ai modifié mon code. Ca marche bien maintenant, mais qu'est ce que c'est moche ...
    Je voudrais juste une confirmation sur le fait qu'on ne puisse pas afficher une erreur dans une vue ci celle ci est "loader" par un redirect_to ? Et ya t'il un moyen "joli" pour contourner ca ?

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    Si tu poses la question, c'est que t'as pas bien compris comment fonctionnait les erreurs dans Rails ( pas d'offense hein, c'est normal quand on débute )

    Ce qu'il se passe, c'est que quand tu submit ton formulaire, ton nouvel objet est créé. Dans cet objet, se trouve, par défaut, un "sous objet" "errors", vide à l'origine ( accessible via @tonobjet.errors ). Ensuite, quand les assistants de validation sont exécutés, ils remplissent peu à peu le .errors si la validation échoue.

    Et le helper error_messages_for au final ne fait "que" lire ce @tonobjet.errors et s'il n'est pas vide, affiche les différentes erreurs.

    Or avec un redirect_to, tu fais comme une nouvelle requete, donc @tonobjet, que t'as créé dans la requete précédente n'existe plus.
    Donc il faut que quelque part, tu lui passes ton objet, via la session par exemple, ou le flash (qui est justement fait pour transmettre des infos entre 2 controllers).

  7. #7
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    Si tu poses la question, c'est que t'as pas bien compris comment fonctionnait les erreurs dans Rails ( pas d'offense hein, c'est normal quand on débute )
    Tu ne m'offenses pas du tout


    Or avec un redirect_to, tu fais comme une nouvelle requete, donc @tonobjet, que t'as créé dans la requete précédente n'existe plus.
    En effet, je ne savais pas ca... L'interet est que maintenant je ne risque plus faire d'erreur.
    Je connaissais bien "les propriétés" du redirect_to, je pense que mon problème était bien plus grave. Je n'avais pas compris reellement le périmètre d'accéssibilité d'une propriété. Va falloir que je vois tout ca...

    Pour gérer d'autres styles d'erreurs (des erreurs non validables par le modèle), utiliser les flash est une bonne idée donc ? (parce que j'ai fait ca pour l'authentification d'un utilisateur et je me demandais)

    En tout cas merci pour votre aide

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

Discussions similaires

  1. Formulaire, redirections et gestion des erreurs
    Par xnopre dans le forum Langage
    Réponses: 7
    Dernier message: 18/08/2011, 08h58
  2. Réponses: 1
    Dernier message: 10/08/2010, 18h55
  3. Formulaire et gestion des erreurs
    Par sam01 dans le forum Langage
    Réponses: 12
    Dernier message: 17/06/2010, 09h38
  4. Gestion des erreurs de formulaire
    Par TempusFugit dans le forum Langage
    Réponses: 4
    Dernier message: 29/10/2009, 15h34
  5. Réponses: 2
    Dernier message: 06/07/2006, 08h22

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