Как установить ActionMailer default_url_options: хост динамически на имя хоста запроса?
Я пытаюсь установить параметры URL-адреса по умолчанию для почтового клиента:.
У меня есть следующий набор во всех файлах среды
config.action_mailer.default_url_options = {
:host => "localhost"
}
Я хочу сделать его более динамичным, предоставив хост-запрос.
когда я пытаюсь установить его
config.action_mailer.default_url_options = {
:host => request.domain
}
ИЛИ
config.action_mailer.default_url_options = {
:host => request.env["SERVER_NAME"]
}
Он выдает ошибку... не распознает объект "запрос"
Есть ли способ установить это на хост-запрос, а не на hardcoding...?
Ответы
Ответ 1
Также можно установить хост по умолчанию, который будет использоваться во всех почтовых программах, установив параметр: host в хеше ActionMailer:: Base.default_url_options
в application_controller.rb before_filter
добавить:
ActionMailer::Base.default_url_options = {:host => request.host_with_port}
В качестве альтернативы вы можете передать запрос при вызове функции почтовой программы с контроллера
class UserMailer < ActionMailer::Base
def welcome_email(user, request)
UserMailer.default_url_options[:host] = request.host_with_port #option1
@user = user
@url = user_url(@user, host: request.host_with_port ) #option2 (do this for each link)
mail(:to => user.email,
:subject => "Welcome to My Awesome Site")
end
end
Источник: http://guides.rubyonrails.org/action_mailer_basics.html#generating-urls-in-action-mailer-views
Ответ 2
Вы можете создать фильтр по умолчанию следующим образом:
# application_controller.rb
before_filter :mailer_set_url_options
...
def mailer_set_url_options
ActionMailer::Base.default_url_options[:host] = request.host_with_port
end
(источник: http://www.cherpec.com/2009/06/missing-host-to-link-to-please-provide-host-parameter-or-set-default_url_optionshost/)
Ответ 3
проблема в том, что это инициализаторы, они запускаются при загрузке стека рельсов, а не при вызове активной почтовой программы.
но вам не нужно использовать default_url, вы можете просто передать имя хоста в URL-адреса url_for/named в каждом своем представлении. По умолчанию просто избегает этого.
см. раздел http://api.rubyonrails.org/classes/ActionMailer/Base.html для генерации URL-адресов.