2010-10-24 13 views
15

me gustaría personalizar el msg siguientes Flash proporcionada por legado en el archivo devise.en.yml:rieles/Diseñar - Personalizar mensaje flash (devise.en.yml) con un link_to

devise: 
    failure: 
     unconfirmed: 'You have to confirm your account before continuing.' 

con código ruby ​​para obtener un enlace a new_user_confirmation_path.

en otras palabras, quiero que mi mensaje flash muestra algo así como: '¿no recibieron instrucciones de confirmación'

'You have to confirm your account before continuing. Didn't receive confirmation instructions?' 

donde es un enlace a new_user_confirmation_path.

Me gustaría saber si puedo hacer esto sin editar el controlador de usuario, ya que Devise no lo proporciona de forma predeterminada.

Gracias por su respuesta!

Respuesta

18

new_user_confirmation_path es una URL estática equivalente a /users/confirmation/new

Por lo que sólo puede hacer esto en su archivo devise.en.yml:

devise: 
    failure: 
    unconfirmed: "You have to confirm your account before continuing. <a href='/users/confirmation/new'>Didn't receive confirmation instructions?</a>" 

En las acciones del controlador donde publica su flash que asegúrese tener .html_safe por ej. flash[:error].html_safe

1

Si estoy entiendo pregunta corregir el bit de código t ('idear ... debe colocar a nuestro punto de vista, en la que desea mostrar este mensaje

Por ejemplo devise/new.erb:.

<%= t('devise.failure.unconfirmed', 
     :confirm_link => link_to(
     t('devise.failure.confirm_link_text'), 
     new_user_confirmation_path).html_safe 
    ) unless user.confirmed %> 
+0

Hola potapuff, voy a reescribir la pregunta con el fin de hacerlo más claro. ¡Gracias! – benoitr

3

en una de mis aplicaciones que uso Diseñar y CanCan. me rescate de los errores del Cancan con algo como lo siguiente en mi conroller aplicación.

rescue_from CanCan::AccessDenied do |exception| 
    if current_user 
    flash[:error] = exception.message 
    redirect_to root_url 
    else 
    flash[:error] = t("devise.failure.unauthenticated") 
    redirect_to new_user_session_path 
    end 
end 

Tal vez podría hacer algo similar y rescatar de Devise? Su mensaje flash podría entonces ser algo como:

flash[:error] = t("devise.failure.unconfirmed") + link_to "Didn't receive confirmation instructions?", new_user_confirmation_path 

Aún mejor sería poner el "no recibieron ..." en su propio yml traducción si es necesario.

0

También puede hacerlo en su legado diseño específico: app/views/layouts/devise.html.slim

- flash.each do |type, message| 
    - if ['alert', 'error', 'notice'].include?(type.to_s) 
    .alert-box class=type 
     => message 
     - case message 
     - when t('devise.failure.unauthenticated') 
     = link_to "Forgot your password?", new_password_path(resource_name) 
     - when t('devise.failure.unconfirmed') 
     = link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) 
     - when t('devise.failure.locked') 
     - if resource_class.unlock_strategy_enabled?(:email) 
      = link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) 
0

Creo que la forma correcta para Rails 3 & Carriles 4 para agregar enlaces necesarios y otra información para idear mensajes flash es escribir su propia Devise::FailureApp:

# lib/custom_failure.rb 
class CustomFailure < Devise::FailureApp 
    def i18n_options(options) 
    path = Rails.application.routes.url_helpers.new_user_confirmation_path 
    link = ActionController::Base.helpers.link_to(I18n.t('.unconfirmed_link_text', options), path) 

    super(options).merge(new_user_confirmation_link: link) 
    end 
end 

Y añadir a la interpolación traducciones:

devise: 
    failure: 
    unconfirmed: You have to confirm your account before continuing.%{new_user_confirmation_link} 
    unconfirmed_link_text: Didn't receive confirmation instructions? 

no se olvide de añadir a config/initializers/devise.rb:

config.warden do |manager| 
    manager.failure_app = CustomFailure 
end 
Cuestiones relacionadas