2011-04-23 6 views

Répondre

67

Probablement la meilleure façon de le faire est de

  1. Définir chaque message comme une chaîne vide
  2. Vérifiez la longueur de la chaîne avant de vous montrer un message flash.

Dans votre fichier devise.en.yml, indiquez chaque message vide:

en: 
    errors: 
    messages: 
     not_found: '' 
     already_confirmed: '' 
     not_locked: '' 

etc. Ensuite, dans votre mise en page, vérifiez les chaînes flash vierges avant de les sortie.

<% flash.each do |key, value| %> 
    <%= content_tag :div, value, :class => "flash #{key}" unless value.blank? %> 
<% end %> 
+6

Très élégant! Pour mon idée (2.1.0), il suffit de régler la chaîne sur '' fait l'affaire sans vérifier si elle est vide? –

+1

Même après 4 ans cela fonctionne toujours: +1, merci – Abhinay

-3

Devise comprend un générateur pratique pour copier toutes les vues dans votre projet:

rails generate devise:views 

De cette façon, vous pouvez modifier les vues vous-même et de décider ce que vous voulez garder ou jeter (messages flash) .

+1

Cela ressemble à une réponse à une autre question. Vous ne pouvez pas désactiver les messages flash avec cela. Voir la réponse de Brandon. – Voldy

+1

Vous pouvez si vous affichez vos messages flash dans chaque vue, en le supprimant. Mais il semble que cette question suppose qu'ils sont dans la mise en page. –

30

Une réponse mieux adaptée pour moi était de passer outre la session Devise Controller comme celui-ci

class SessionsController < Devise::SessionsController 

    # POST /resource/sign_in 
    def create 
    super 
    flash.delete(:notice) 
    end 

    # DELETE /resource/sign_out 
    def destroy 
    super 
    flash.delete(:notice) 
    end 

end 

Ceci remplace en toute sécurité la créer et de détruire la méthode supprimant le message flash

+3

dans Rails 4 et Devise 3.4.1, j'ai dû ajouter ceci aux routes: devise_for: users, controllers: {sessions: "sessions"} –

5

Je suis en mesure de les désactiver dans un contrôleur donné en remplaçant is_flashing_format?:

def is_flashing_format? 
    false 
end 

J'utilise 3.5.6

Devise
0

Pour Rails 5.0.6 ce code fonctionnera.

app/controllers/sessions_controller.rb

class SessionsController < Devise::SessionsController 

    def new 
    flash.clear 
    super 
    end 
end 

Ne pas oublier les routes.

config/routes.rb

devise_for :users, controllers: { sessions: 'sessions' }

Questions connexes