2012-02-07 3 views
0

내 응용 프로그램에서 모두 실행되지만 다른 도메인을 가진 사이트에 대한 링크를 생성 할 수 있어야합니다 (나는 whitelabel 서비스를 실행하고 있습니다).actionmailer에서 런타임시 default_url_options를 어떻게 재정의 할 수 있습니까?

우편물에 따라 다른 호스트를 설정하기 위해이 도메인을 대신하여 전자 메일이 전송됩니다. 내 호스트 내가 대신 런타임에이 작업을 수행하기 위해 노력하고있어 링크에 따라 다르기 때문에,

config.action_mailer.default_url_options[:host] = 'myhost.com' 

그러나 :

은 일반적으로 내가 설정 hostapplication.rb을 것입니다.

user_mailer.rb는 :

Rails.configuration.action_mailer.default_url_options[:host] = new_host 
mail(...) 

문제는 그 나는 그것이 application.rb에 정의되어 무엇이든 계속 사용이 실행할 때마다. 나는 새로 정의 된 값 default_url_optiions[:host]을 존중하도록 응용 프로그램을 얻는 것처럼 보이지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

1

전체보기가 많지 않으면 url_for 도우미에 호스트를 정의하고, 너무 많은보기가있는 경우 :host => 'mysite.com'과 함께 url_for 도우미를 래핑하는 자신 만의 도우미를 작성하는 것이 좋습니다.

+0

감사합니다. 실제 경로 도우미에서 호스트를 강제로 실행할 수 있는지 여부를 아십니까? 'new_user_url 호스트 : 'testhost.com''? –

0

default_url_options 메서드는 Class의 ActiveSupport 코어 확장에서 정의 된 class_attribute를 사용하여 ActionMailer에 설정됩니다. 문서에 따르면 클래스 수준 메서드에 영향을주지 않고 인스턴스 단위로 재정의 할 수있는 인스턴스 수준 접근 자도 제공합니다. 그래서 당신이 당신이 런타임에 설정을 수정할 수 있도록해야

class UserMailer < ActionMailer::Base 
    def welcome(user) 
    @user = user 

    # don't need this if you override #mail method. 
    self.default_url_options = default_url_options.merge(host: @user.host) 

    mail(to: user.email, subject: "Welcome") 
    end 

    # might be better to override mail method if you need it for all emails in 
    # a particular mailer 
    private 

    def mail(headers, &block) 
    self.default_url_options = default_url_options.merge(host: @user.host) 

    super 
    end 
end 

각 이메일을 직접 설정 호스트를 오버라이드 (override) 할 수 있어야한다; @ user.host 호출을 무시하고 대신 호스트를 결정하십시오.

관련 문제