2010-11-09 4 views
4

J'utilise Devise pour l'authentification et le formulaire de connexion utilise des notifications flash au lieu d'erreurs de formulaire pour afficher les problèmes lors de la connexion. Mais je souhaite mettre en évidence les champs de formulaire appropriés qui ont des erreurs associées comme se produit normalement dans les formes de rails. Quelqu'un sait-il comment faire ça?Comment capturer des erreurs de formulaire dans la page Se connecter avec Devise

+1

Avez-vous déjà vu cette http: // Railscasts. com/episodes/209-introduction-concevoir et ce http://railscasts.com/episodes/210-customizing-devise? – microspino

+1

J'ai vu ceux-ci. Il affiche toujours une erreur pour l'ensemble du formulaire de connexion. – 99miles

Répondre

0

Selon la version Rails (avant 3 ou non), vous pouvez utiliser:

<%= f.error_messages_for :model %> 

la version Rails avant l'utilisation 3.0, ce code pour gérer les erreurs de format. Dans Rails 3, cette méthode est devenue obsolète. Vous devez installer ce plugin pour utiliser le code erb ci-dessus.

Vous pouvez lire plus de détails sur cette modification dans le chapitre "Les nouvelles fonctionnalités" de this asciicast.

This tutorial couvre l'ensemble du processus de construction d'un système d'authentification basé sur concevant et cancan.

+1

Ma question est plus spécifique à la manière dont la forme de signature de l'invention fonctionne. Le problème est qu'il n'ajoute pas les messages d'erreur de cette façon, il suffit de définir une notification flash. C'est ce que j'essaie de contourner. – 99miles

1

La valeur par défaut fonction erreurs Concevoir pour concevoir 1.1.5 peuvent être trouvés dans la gemme DEVISE:

-1.1.5 concevoir/app/helpers/devise_helper.rb

module DeviseHelper 
    def devise_error_messages! 
    return "" if resource.errors.empty? 

    messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join 
    sentence = "#{pluralize(resource.errors.count, "error")} prohibited this #{resource_name} from being saved:" 

    html = <<-HTML 
    <div id="error_explanation"> 
     <h2>#{sentence}</h2> 
     <ul>#{messages}</ul> 
    </div> 
    HTML 

    html.html_safe 
    end 
end 

Je suppose que vous pourriez écraser ce module/fonction si vous voulez qu'il se comporte différemment.

+1

Cela n'a pas fonctionné pour moi. Aucun message d'erreur n'a été généré. Peut-être que les choses ont changé. –

0

Les erreurs sont stockées dans une carte:

resource.errors 

Si votre champ de formulaire appelé :email, vous pouvez obtenir l'erreur associée à ceci:

resource.errors[:email] 
+3

C'est exactement ce que NE fait PAS ¬¬ – robertokl

+0

Que voulez-vous dire? Les erreurs ne sont pas stockées dans resource.errors ou vous ne pouvez pas les obtenir avec resource.error [: email]? Il y a un an, ils étaient là. –

+0

L'erreur déclenchée lorsqu'un utilisateur a entré ses informations d'identification incorrectes est "nom d'utilisateur ou mot de passe invalide", pour des raisons de bonne pratique. Ainsi, il n'y a aucun moyen d'attribuer l'erreur pour l'un ou l'autre champ. – robertokl

Questions connexes