2014-02-17 2 views
0

Учитывая, что объект request не работает в ActionMailer, есть ли способ определить текущий URL-адрес и установить опцию from для настраиваемого контроллера почтовой рассылки?Указать почтовый пользовательский домен из опции

Так это то, что я до сих пор в application_controller.rb:

before_filter :images, :hide_sidebar, :global_vars, :set_mailer_host 
    before_action :sidebar_menu 

    def set_mailer_host 
    ActionMailer::Base.default_url_options[:host] = request.host_with_port 
    @host = request.env['HTTP_HOST'] unless request.env['HTTP_HOST'].include? 'localhost' 
    end 

Разрабатывают Mailer пользовательский класс:

class DeviseMailer < Devise::Mailer 
    helper :application # gives access to all helpers defined within `application_helper`. 
    include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url` 

    def confirmation_instructions(record, token, opts={}) 
    if record.events.present? 
     name = record.events.last.name 
     @event = name 
    else 
     name = "#{record.first_name}," 
    end 
    opts[:from] = "[email protected]#{@host}" if @host 
    opts[:subject] ="#{name} Registration - Confirmation Required" 
    super 
    end 
end 

Также в Devise.rb я установил ниже:

config.mailer = 'DeviseMailer' 

Я не знаю, почему я по-прежнему получаю домен по умолчанию вместо текущего URL.

Поскольку у меня есть несколько URL-адресов, указывающих на одно и то же приложение, есть ли способ обнаружить это и настроить для Devise Mailers?

ответ

0

Почему вы не передадите хост в качестве аргумента вашей почтовой программе?

def confirmation_instructions(record, token, opts={}, host) 
    ... 
end 

DeviseMailer.confirmation_instructions(..., @host).deliver 
+0

привет, с какого контроллера я бы прошел в качестве аргумента? Боюсь, это можно было бы назвать дважды, а также первыми тремя параметрами переписать –

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