2013-05-07 4 views
2

У меня есть пользовательская почтовая программа (UserMailer.rb) и несколько методов, чтобы переопределить методы Devise по умолчанию для приветственных сообщений электронной почты и электронной почты с забытым паролем. Почтовая программа использует настраиваемый шаблон для стилей писем - и он отлично работает.Как настроить «повторный запрос подтверждения» от Devise

В config/initializers, у меня есть файл с

module Devise::Models::Confirmable 
    # Override Devise's own method. This one is called only on user creation, not on subsequent address modifications. 

    def send_on_create_confirmation_instructions 
    UserMailer.welcome_email(self).deliver 
    end 

    ... 
end 

(Опять же, UserMailer настроен и работает отлично подходит для приветствия электронной почты и сбросить пароль по электронной почте.)

Но что не работает это возможность Msgstr "Повторить подтверждение." Он отправляется с использованием стиля Devise по умолчанию, и я хочу, чтобы он использовал стиль моего макета почтовой рассылки. Я знаю, что я могу вручную добавить макет к макету Devise по умолчанию, но я бы хотел, чтобы DRY действовал и не должен был этого делать.

Я попытался перекрывая send_confirmation_instructions метод found here, но я получаю сообщение об ошибке в wrong number of arguments (1 for 0)create(gem) devise-2.2.3/app/controllers/devise/confirmations_controller.rb на

7 # POST /resource/confirmation 
8 def create 
9  self.resource = resource_class.send_confirmation_instructions(resource_params) 

В моем файле инициализации, я в состоянии добраться до этой ошибки путем добавления нового переопределить для Devise, но я, вероятно, не делаю этого правильно:

module Devise::Models::Confirmable::ClassMethods 
    def send_confirmation_instructions 
    UserMailer.send_confirmation_instructions(self).deliver 
    end 
end 

Любые идеи?

ответ

5

Для этого вам не нужно проходить через этот инициализатор. Я сделал это, переопределив контроллер подтверждения. Мои маршруты DEViSE выглядеть так:

devise_for :user, :path => '', :path_names => { :sign_in => 'login', :sign_out => 'logout', :sign_up => 'signup'}, 
:controllers => { 
    :sessions => "sessions", 
    :registrations => "registrations", 
    :confirmations => "confirmations" 
} 

Затем создайте confirmations_controller и расширить DEViSE :: ConfirmationsController переопределять:

class ConfirmationsController < Devise::ConfirmationsController 

В этом контроллере, у меня есть метод создания, чтобы переопределить значение по умолчанию:

def create 

    @user = User.where(:email => params[:user][:email]).first 

    if @user && @user.confirmed_at.nil? 
    UserMailer.confirmation_instructions(@user).deliver 
    flash[:notice] = "Set a notice if you want" 
    redirect_to root_url 
    else 
    # ... error messaging or actions here 
    end 

end 

Очевидно, что в UserMailer можно указать HTML/текстовые шаблоны, которые будут использоваться для отображения сообщения подтверждения. confirmation_token должен быть частью модели @user, вы можете использовать это для создания URL с правильным токеном:

<%= link_to 'Confirm your account', confirmation_url(@user, :confirmation_token => @user.confirmation_token) %> 
Смежные вопросы