我从Subdomain RailsCast获取代码
module UrlHelper
def with_subdomain(subdomain)
subdomain = (subdomain || "")
subdomain += "." unless subdomain.empty?
[subdomain, request.domain, request.port_string].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
class ApplicationController < ActionController::Base
include UrlHelper
end
在控制器的视图中使用修改后的url_for
是可以的。但是我在ActionMailer上遇到了麻烦。
我尝试使用以下内容:
class Notifier < ActionMailer::Base
include UrlHelper
end
但是ActionMailer视图仍然使用来自ActionDispatch::Routing::RouteSet的旧的未修改的url_for。
添加新url_for的最佳做法是什么
3条答案
按热度按时间mwkjh3gx1#
将以下代码添加到文件app/helpers/url_helper.rb中:
并修改文件app/controllers/application_controller.rb以添加:
Source
13z8s7eq2#
我有一个解决这个问题的方法,但我不认为这仍然是最好的方式来做到这一点。我已经尝试,并将继续尝试拿出一个更好的解决方案,但这里是我在我的电子邮件模板所做的。我把这个放在电子邮件模板的原因是因为我正在使用Devise,但我希望能拿出更好的东西。
现在可以像这样将主机传递给url_for
mzsu5hc03#
我发现在Rails 3.0.x上最简单的解决方案是在我的邮件程序视图中的每个URL中手动构造主机和子域。
--您的
@account
模型知道它的子域。这是一个很好的简单的,线程安全的,隔离的,你不需要污染代码库的其他部分,而且一旦你转移到Rails3.1.x,很容易退出,我相信它会自动处理所有这些。