Rails Désactiver les messages flash

Comment puis-je désactiver tous les messages flash Devise gem (“connecté avec succès”, “vous êtes déconnecté”)? Merci.

Le moyen le plus simple est probablement de

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

Dans votre fichier devise.en.yml , spécifiez chaque message comme étant 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 imprimer.

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

Une réponse plus adaptée pour moi était de remplacer le Devise Session Controller comme ceci

 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 

Cela remplace en toute sécurité la méthode create and destroy en supprimant le message flash

J’ai pu les désactiver dans un contrôleur donné en is_flashing_format? :

 def is_flashing_format? false end 

J’utilise Devise 3.5.6

Pour Rails 5.0.6, ce code fonctionnera.

app/controllers/sessions_controller.rb

 class SessionsController < Devise::SessionsController def new flash.clear super end end 

N'oubliez pas les itinéraires.

config/routes.rb

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

Ce travail pour moi:

 # app/controllers/users/sessions_controller.rb class Users::SessionsController < Devise::SessionsController after_action :remove_notice, only: [:destroy, :create] private def remove_notice flash.discard(:notice) #http://api.rubyonrails.org/v5.1/classes/ActionDispatch/Flash/FlashHash.html#method-i-discard end end # add this line in 'config/routes.rb' devise_for :users, :controllers => { sessions: 'users/sessions' } 

J’utilise Users::SessionsController mais vous pouvez utiliser SessionsController , je n’ai qu’un modèle dans cet exemple.

J’utilise flash.discard(:notice) mais vous pouvez utiliser flash.discard pour supprimer d’autres types en même temps. (méthode éliminer depuis les rails 3.0)

Je préfère cette approche, car ce n’est pas le rôle de la vue de vérifier si votre message flash est vide. Si vous avez un message flash, imprimez-le! Si vous ne voulez pas, alors ne créez pas de message flash 😉

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 décider de ce que vous voulez garder ou jeter (messages flash).