Подтвердить что ты не робот

Как установить 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...?

4b9b3361

Ответ 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

Ответ 3

проблема в том, что это инициализаторы, они запускаются при загрузке стека рельсов, а не при вызове активной почтовой программы.

но вам не нужно использовать default_url, вы можете просто передать имя хоста в URL-адреса url_for/named в каждом своем представлении. По умолчанию просто избегает этого.

см. раздел http://api.rubyonrails.org/classes/ActionMailer/Base.html для генерации URL-адресов.