2013-02-16 4 views
0

Я пытаюсь настроить свой ActionMailer так, чтобы он считывал URL-адрес, с которого он был отправлен. Когда это приложение будет развернуто, оно может оказаться на многих разных серверах с разными именами доменов. Вместо того, чтобы пользователь заходил в код и принудительно вводил URL-адрес статически, я хотел бы, чтобы URL-адрес сброса пароля включал домен, из которого он был создан (включая http: // или https: //).Возврат корневого URL при отправке сообщения ActionMailer

Я пробовал ::Rails.root, request.host_with_port и ::Rails.root_path в Mailer, но ни один из них не дал результатов. request.host_with_port генерирует неопределенную ошибку метода.

def reset_password_email(user) 
    @user = user 
    @url = "#{::Rails.root_path}/password_resets/#{user.reset_password_token}/edit" 
    mail(:to => user.email, 
     :subject => "Your password has been reset") 
    end 
+0

Пожалуйста, запустите 'rake routes' и покажите нам выход. – weltschmerz

ответ

1

Я предполагаю, что вы называете reset_password_email(user) одного из контроллеров приложений.

Вы можете обновить это определение метода и отправить с пользователем текущий хост и порт к нему:

def reset_password_email(user, request) 
    @user = user 
    @url = "#{request.protocol}#{request.host_with_port}/password_resets/#{user.reset_password_token}/edit" 
    mail(:to => user.email, :subject => "Your password has been reset") 
end 

Не забудьте обновить код вашего контроллера.

+0

+1 На самом деле это использует драгоценный камень 'sorcery'. Я использую '# {request.protocol} # {request.host_with_port}' с моей другой почтовой программой в контроллере. – kobaltz

Смежные вопросы