ruby-on-rails - not - devise rails español
Rails Deshabilitar diseñar mensajes flash (6)
¿Cómo puedo deshabilitar todos los mensajes flash de gem de Devise ("inicié sesión con éxito", "cerró la sesión")? Gracias.
Devise incluye un práctico generador para copiar todas las vistas en su proyecto:
rails generate devise:views
De esta forma, puede editar las vistas usted mismo y decidir qué desea guardar o tirar (mensajes flash).
Este trabajo para mí:
# 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'' }
Uso Users::SessionsController
pero puede usar SessionsController
, tengo solo un modelo de diseño en este ejemplo.
Yo uso flash.discard(:notice)
pero puedes usar flash.discard
para eliminar otros tipos al mismo tiempo. (descarte del método desde los rieles 3.0)
Prefiero este enfoque, porque la función de la vista no es verificar si el mensaje flash está en blanco. Si tiene un mensaje flash, ¡imprímalo! Si no quiere, no cree mensajes flash ;-)
He podido deshabilitarlos en un controlador dado anulando is_flashing_format?
:
def is_flashing_format?
false
end
Estoy usando Devise 3.5.6
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 te olvides de las rutas.
config/routes.rb
devise_for :users, controllers: { sessions: ''sessions'' }
Probablemente la forma más fácil de hacer esto es
- Definir cada mensaje como una cadena en blanco
- Verifique la longitud de la cadena antes de mostrar un mensaje flash.
En su archivo devise.en.yml
, especifique cada mensaje como vacío:
en:
errors:
messages:
not_found: ''''
already_confirmed: ''''
not_locked: ''''
etc. A continuación, en su diseño, compruebe si hay cadenas de flash en blanco antes de imprimirlas.
<% flash.each do |key, value| %>
<%= content_tag :div, value, :class => "flash #{key}" unless value.blank? %>
<% end %>
Una respuesta más adecuada para mí fue anular el Controlador de Sesiones Devise como este
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 manera segura el método de crear y destruir, eliminando el mensaje flash