2011-03-12 3 views
23

Le framework d'authentification Devise utilise des notifications Flash partout. Cela facilite l'intégration avec les applications, mais cela entraîne parfois une mauvaise expérience utilisateur.Désactivation sélective des notifications Flash de Devise dans Rails 3

Je me demande quel est le moyen le plus simple pour désactiver sélectivement certains des avis de flash Devise dans mon application Rails 3. En particulier, j'aimerais me débarrasser des flashs signés clairement signed_in et signed_out.

Certaines recherches suggèrent de sous-classer le contrôleur de session ou utilisent something like this mais je n'ai pas trouvé de solution simple à ce problème.

Répondre

32

Vous pouvez personnaliser vos messages flash de concevoir avec le backend I18n qui conçoit des supports. Si vous définissez rien pour clé particulière, le message flash vide ne sera pas affiché, par exemple pour sign_in et sign_out:

en: 
    devise: 
    failure: 
     unauthenticated: 'You need to sign in or sign up before continuing.' 
     unconfirmed: 'You have to confirm your account before continuing.' 
     locked: 'Your account is locked.' 
     invalid: 'Invalid email or password.' 
     invalid_token: 'Invalid authentication token.' 
     timeout: 'Your session expired, please sign in again to continue.' 
     inactive: 'Your account was not activated yet.' 
    sessions: 
     signed_in: "" 
     signed_out: "" 

UPD.

Vous ne devez pas retirer la clé sinon vous obtiendrez une erreur. Pour ne pas afficher les messages flash vides que vous devez faire simple vérification dans la vue (par ex avec haml.):

- unless notice.blank? && alert.blank? 
    #flash 
    .wrapper 
     - unless notice.blank? 
     %p.notice= notice 
     - unless alert.blank? 
     %p.alert= alert 
+0

il en résulte le message d'erreur: traduction manquante: en.devise.sessions.user.signed_out – emh

+0

Avez-vous supprimé cette clé? Essayez de définir une chaîne vide avec des guillemets lorsque j'ai mis à jour ma réponse. – Voldy

+0

Voldy, si je mets une traduction à _nothing_ ou une chaîne vide alors je reçois un flash vide. Si je retire la clé, j'obtiens une erreur. – Sim

8

Une meilleure façon de cacher les messages flash vide: si votre message est dans une div avec classe « avis "ou « erreur » CSS3 vous permet d'avoir un style comme celui-ci:

.notice:empty { 
    display: none; 
} 

ce qui est agréable parce que vous pouvez toujours afficher la div flash et il ne diffusons quand il y a quelque chose. J'utilise ceci pour mettre à jour les messages flash dans les réponses d'appels ajax qui autrement ne mettraient pas à jour les messages flash car il n'y a pas de rechargement de page impliqué. Il donne un aspect cohérent aux messages qui viennent à la suite d'appels ajax.

+0

Cela ne fonctionnera pas dans IE8 ou ci-dessous. –

Questions connexes