2010-10-24 7 views
15

Chciałbym dostosować następujące wiad lampy dostarczone przez devise w pliku devise.en.yml:Rails/Devise - Dostosuj wiadomość flash (devise.en.yml) z link_to

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

z kod ruby, aby uzyskać link do new_user_confirmation_path.

innymi słowy, chcę moje przesłanie Flash wyświetla coś takiego: „? Nie otrzymałeś instrukcji potwierdzania”

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

gdzie jest linkiem do new_user_confirmation_path.

Chciałbym wiedzieć, czy mogę to zrobić bez edytowania kontrolera użytkownika, ponieważ program Devise nie zapewnia go domyślnie.

Dzięki za odpowiedź!

Odpowiedz

18

new_user_confirmation_path jest statyczną url równoważne /users/confirmation/new

Więc można tylko zrobić to w pliku 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>" 

w działaniach kontrolerów gdzie wyświetlać swoje lampy upewnij się, mają np. .html_safeflash[:error].html_safe

1

Jeśli mam zrozumieć umieścić pytanie prawy bit kodu t ('opracować ... trzeba umieścić na naszym zdaniem, na której chcesz wyświetlić tę wiadomość

Na przykład 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

Hi potapuff będę przepisać pytanie w celu uczynienia go bardziej zrozumiałym. Dzięki! – benoitr

3

w jednej z moich aplikacji używam opracować i kankana. i ratunkowego od błędów CanCan za coś jak następujących w moim zgłoszeniu conroller.

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 

Może mógł zrobić coś podobnego i uratować się od Devise? Wiadomość błysk może następnie być coś takiego:

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

Jeszcze lepiej byłoby umieścić „Nie otrzymałeś ...” w jego własnym tłumaczeniu yml jeśli zajdzie taka potrzeba.

0

Można również zrobić to w swojej opracować szczególne układ: 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

Myślę, że właściwą drogą do szyny 3 & Rails 4, aby dodać potrzebne linki i inne informacje do opracowania wiadomości flash, to napisać własny 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 

I dodać interpolacja do tłumaczenia:

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

nie zapomnij dodać do config/initializers/devise.rb:

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