如何在url helpers中使用当前子域

时间:2010-12-11 19:00:07

标签: ruby-on-rails routing devise

我有一个来自Devise的网址助手,如下所示:

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

如何使用当前子域而不是主子域创建网址?

3 个答案:

答案 0 :(得分:13)

Devise wiki中描述的主要解决方案不适用于设置任意子域,如果您在一个子域(或应用程序的根域)中的请求期间触发生成电子邮件并且想要链接,则会出现问题在电子邮件中引用不同的子域。

普遍接受的方法是让url_for助手为:subdomain选项。

# 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

下一步至关重要,我怀疑这是很多人被绊倒的地方(我知道我做过)。通过将以下代码添加到config/application.rb

,确保Devise将新的子域助手混合到其邮件程序对象中
  config.to_prepare do
    Devise::Mailer.class_eval do 
      helper :subdomain 
    end
  end

现在,当您在Devise邮件程序模板中执行link_to时,您可以轻松指定:subdomain选项。

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

答案 1 :(得分:3)

尝试传递它:host => 'yoursub.domain.com'

答案 2 :(得分:0)

相关问题