2011-04-23 16 views
41

¿Cómo puedo deshabilitar todos los mensajes flash de gemas de Devise ("inicié sesión con éxito", "cerró la sesión")? Gracias.Raíles Deshabilitar diseñar mensajes flash

+1

Duplicados esta pregunta http://stackoverflow.com/questions/5281365/selectively-turning-off-devises-flash-notices-in-rails-3 – Voldy

Respuesta

67

Probablemente la forma más sencilla de hacerlo es a

  1. definir cada mensaje como una cadena en blanco
  2. Compruebe la longitud de la cuerda antes de mostrar un mensaje flash.

En el archivo devise.en.yml, especifique cada mensaje lo más vacío:

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

etc. A continuación, en el diseño, la verificación de las cadenas de flash en blanco antes que los de salida.

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

muy elegante! Para mi dispositivo (2.1.0), simplemente configurar la cadena para '' hizo el truco sin verificar el espacio en blanco? –

+1

Incluso después de 4 años esto todavía funciona: +1, gracias – Abhinay

-3

Diseñar incluye un generador de mano para copiar todos los puntos de vista en su proyecto:

rails generate devise:views 

De esta manera se pueden editar los puntos de vista y decidir lo que desea conservar o tirar a la basura (mensajes flash) .

+1

Parece una respuesta para otra pregunta. No puede deshabilitar los mensajes flash con eso. Ver la respuesta de Brandon. – Voldy

+1

Puedes hacerlo si muestras tus mensajes flash en cada vista, eliminándolos. Pero parece que esta pregunta supone que están en el diseño. –

30

Una respuesta más adecuada para mí era para anular el controlador de la sesión Diseñar como esto

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 

Esto anula de forma segura el método de crear y destruir la eliminación del mensaje flash

+3

en Rails 4 y Devise 3.4.1, tuve que agregar esto a las rutas: devise_for: users, controllers: {sessions: "sessions"} –

5

que he sido capaz de desactivar en un controlador determinado anulando is_flashing_format?:

def is_flashing_format? 
    false 
end 

estoy usando Diseñar 3.5.6

0

Para Rails 5.0.6 este código funcionará.

app/controllers/sessions_controller.rb

class SessionsController < Devise::SessionsController 

    def new 
    flash.clear 
    super 
    end 
end 

No se olvide de las rutas.

config/routes.rb

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

Cuestiones relacionadas