2010-12-11 4 views
2

ich einen URL Helfer aus Devise habe wie folgt:Wie aktuelle Sub-Domain in URL Helfern verwenden

account_confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) 

Wie mache ich es die URL mit der aktuellen Sub-Domain zu erstellen, anstatt nur die Hauptdomäne?

Antwort

3

Versuchen Sie es vorbei: host => 'yoursub.domain.com'

+1

Ich denke, er will es automatisch geschehen. –

13

Die wichtigste Lösung im Wiki beschrieben Devise nicht funktioniert für beliebige Einstellung Subdomains und ist ein Problem, wenn Sie die Generierung von E-Mails während einer Anfrage in einer Subdomain (oder der Stammdomäne Ihrer Anwendung) auslösen und möchten, dass die Links in der E-Mail auf eine andere Subdomain verweisen.

Der allgemein akzeptierte Weg, um es zum Laufen zu bringen, ist, dem url_for Helfer eine :subdomain Wahl zu geben.

# app/helpers/subdomain_helper.rb 

module SubdomainHelper 
    def with_subdomain(subdomain) 
    subdomain = (subdomain || "") 
    subdomain += "." unless subdomain.empty? 
    host = Rails.application.config.action_mailer.default_url_options[:host] 
    [subdomain, host].join 
    end 

    def url_for(options = nil) 
    if options.kind_of?(Hash) && options.has_key?(:subdomain) 
     options[:host] = with_subdomain(options.delete(:subdomain)) 
    end 
    super 
    end 
end 

Der nächste Schritt ist entscheidend, und ich vermute, es ist, wo eine Menge Leute aufstehen ausgelöst (ich weiß, ich habe). Stellen Sie sicher, dass Ihre Devise mischt neue Sub-Domain-Helfer in seine Mailer Objekte indem Sie den folgenden Code zu config/application.rb

config.to_prepare do 
    Devise::Mailer.class_eval do 
     helper :subdomain 
    end 
    end 

Nun, wenn Sie einen link_to in Ihrer Devise Mailer-Vorlage zu tun, können Sie einfach eine :subdomain Option angeben.

link_to 'Click here to finish setting up your account on RightBonus', 
    confirmation_url(@resource, :confirmation_token => @resource.confirmation_token, :subdomain => @resource.subdomain)