Me gustaría acceder a current_user.username en mi mensaje flash después de registrarme. ¿Cómo voy a hacer esto? ¿Se puede hacer esto en el archivo devise.en.yml?idear mensaje flash personalizado
Respuesta
Creo que debe sobrescribir el controlador de registro para personalizar su mensaje flash.
Si echa un vistazo al archivo devise.en.yml, puede ver que se usan algunas variables como %{resource}
o %{count}
. Al echar un vistazo al controlador de registro original, se puede ver el código (check here)
# POST /resource
def create
build_resource(sign_up_params)
if resource.save
yield resource if block_given?
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_flashing_format?
sign_up(resource_name, resource)
respond_with resource, location: after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format?
expire_data_after_sign_in!
respond_with resource, location: after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
respond_with resource
end
final
Me gustaría volver a escribir este controlador y añadir esta línea
set_flash_message :notice, :signed_up, :username => resource.username if is_flashing_format?
A continuación, en el archivo de devise.en.yml
, deberías poder usar algo así
devise:
registrations:
signed_up: 'oh hello %{username}'
Dime si eso funcionó.
Si necesita pista sobre cómo reescribir controlador que concebir y echar un vistazo a this
espero que ayudó.
===== ===== ACTUALIZACIÓN
lo probé y funcionó.
Bueno por lo que si queremos ir más profundo, podemos comprobar lib/devise/controllers/internal_helpers.rb
:
# Sets the flash message with :key, using I18n. By default you are able
# to setup your messages using specific resource scope, and if no one is
# found we look to default scope.
# Example (i18n locale file):
#
# en:
# devise:
# passwords:
# #default_scope_messages - only if resource_scope is not found
# user:
# #resource_scope_messages
#
# Please refer to README or en.yml locale file to check what messages are
# available.
def set_flash_message(key, kind, options={}) #:nodoc:
options[:scope] = "devise.#{controller_name}"
options[:default] = Array(options[:default]).unshift(kind.to_sym)
options[:resource_name] = resource_name
message = I18n.t("#{resource_name}.#{kind}", options)
flash[key] = message if message.present?
end
Pero por favor, actualice su código para que podamos ver lo que está mal.
- 1. Cuadro de mensaje personalizado
- 2. carriles - Idear signo de fracaso/autenticación no actualiza gama errores con el mensaje
- 3. mensaje flash basado en Cookie vs. sesión
- 4. Mensaje flash en redirección no funciona
- 5. Rieles: mensaje de validación personalizado
- 6. Win32 cuadro de mensaje personalizado
- 7. jquery validator addmethod mensaje personalizado
- 8. jQuery Validation plugin - Mensaje personalizado
- 9. Idear no validar contraseña/contraseña de confirmación
- 10. idear reconfirmable
- 11. $ .mobile.showPageLoadingMsg con mensaje personalizado está fallando
- 12. MVC 3 AuthorizeAttribute Redirigir con mensaje personalizado
- 13. Django admin, mensaje de error personalizado?
- 14. Mensaje de error personalizado con HTTPStatusCodeResult & jQuery
- 15. ValidatorError personalizado (fácil de usar) mensaje
- 16. validación mensaje personalizado para carriles 3
- 17. representación parcial en un mensaje flash en Rails 3
- 18. rieles/Diseñar - Personalizar mensaje flash (devise.en.yml) con un link_to
- 19. ¿Es posible pasar un mensaje flash de Rails a Sinatra?
- 20. Cómo renderizar editar vista y publicar mensaje flash en rails3
- 21. El mensaje flash desaparece al redireccionar en Symfony 2.1
- 22. Pasar el objeto entre las vistas (mensaje flash)
- 23. ember-data: Cómo hacer un mensaje flash de guardado/guardado
- 24. rieles: impiden mensaje flash de mostrar dos veces
- 25. Rails idear Sesiones Controlador
- 26. Rspec, CanCan e idear
- 27. Idear con Sinatra
- 28. Idear suave Confirmación
- 29. Prueba idear con la debería
- 30. rieles Deshacer generan idear vistas
Funcioné carriles g Controlador Registros y copiado y pegado en el código de diseño original. Luego modifiqué la línea apropiada como sugirió y el archivo devise.en.yml también. Obtengo este error: falta el argumento de interpolación en "Registrarse completo,% {nombre de usuario}" ({: nombre_de_depósito =>: usuario} dado) – chief
Actualicé mi publicación. Intenté mi consejo y funcionó para mí. – Lucas
Mmm, volviendo a leer su comentario, tengo la sensación de que olvidó decirle a Rails que use su nuevo controlador para registros. Por favor, siga eso: en config/routes.rb agregue: controllers => {: registrations => "registrations"} a su devise_for root. (ver de nuevo ese [tutorial] (https://github.com/plataformatec/devise/wiki/How-To%3a-Allow-users-to-edit-their-account-without-providing-a-contraseña)) – Lucas