ruby-on-rails - not - devise rails español
Devise/Rails-¿Cómo eliminar un mensaje flash en particular?(Firmado con éxito) (8)
¡De acuerdo!
Como dijo Shingara, defino una cadena vacía en devise.en.yml
sessions:
signed_in: ''''
y también cambio un poco la siguiente línea (provista por nifty-generators):
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, :id => "flash" if msg.length > 0 %>
<% end %>
De esa manera, mi CSS no aparece.
Usando Devise, me gustaría saber si hay una forma de eliminar un mensaje flash en particular. (Firmado con éxito).
Me importa otro mensaje en la vista, por lo que es solo para el que está registrado y el que está desconectado. ¿Tuve que sobrescribir el controlador o hay otra forma?
¡Gracias!
Cadena vacía en el archivo de configuración regional (como se sugiere arriba) pero también agregue el siguiente fragmento de CSS para ocultar (en lugar de monkeying con sus vistas de flash)
.flash.alert:empty {
display: none;
}
Creo que el dispositivo ahora entiende que si cambia el mensaje de error en config/locals/devise.en.yml
a una cadena vacía, automáticamente lo ignorará. Al menos eso es lo que funcionó conmigo.
Desde mi punto de vista, no veo el punto de vaciar una traducción de cadenas, cuando puedes modificar fácilmente cómo está funcionando el controlador. Supongo que de esta manera es mucho más correcto y satisfactorio.
Una mejor respuesta podría ser anular el método de destrucción en sessionController.
Simplemente crea un archivo ubicado en: app / controllers / sessions_controller.rb
Como puede ver, comentamos la línea que crea el mensaje flash.
class SessionsController < Devise::SessionsController
# DELETE /resource/sign_out
def destroy
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
#set_flash_message :notice, :signed_out if signed_out && is_flashing_format?
yield if block_given?
respond_to_on_destroy
end
end
Otra forma es si anula el controlador Devise, en la acción de creación, coloque este código, que borra el mensaje flash:
class MyDevise::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 fue respondido en esta otra pregunta SO. Para una publicación de blog sobre cómo anular el controlador Devise, vea mi publicación en el blog
Otra forma flexible de hacerlo es deshacer el aviso después de la acción:
class SessionsController < Devise::SessionsController
after_action :remove_notice, only: :destroy
private
def remove_notice
flash[:notice] = nil
end
end
Con esta solución, puede agregar condiciones para eliminar o no el aviso.
Puede hacer esto, cambie amablemente el tipo de condición y el tipo de flash en consecuencia.
flash.delete (: alerta) si flash [: alerta] == "Debe iniciar sesión o registrarse antes de continuar." @drivers = params [: keyword] .blank? ? []: Driver.find (params [: palabra clave])
Puedes hacerlo antes del filtro.
Usted simplemente lo define como una cadena vacía en su archivo local. En este caso, no puedes ver nada.