Ruby on rails 使用Rails 4连接到url_
我正在将Rails 3应用程序迁移到Rails 4。对于我们的应用程序,我们有两个顶级域名,用于我们的英语网站和日语网站。为了动态链接到适当的站点,我们扩展了url_,如下所示Ruby on rails 使用Rails 4连接到url_,ruby-on-rails,Ruby On Rails,我正在将Rails 3应用程序迁移到Rails 4。对于我们的应用程序,我们有两个顶级域名,用于我们的英语网站和日语网站。为了动态链接到适当的站点,我们扩展了url_,如下所示 module I18nWwwUrlFor def url_for(options=nil) if options.kind_of?(Hash) && !options[:only_path] if %r{^/?www} =~ options[:controller]
module I18nWwwUrlFor
def url_for(options=nil)
if options.kind_of?(Hash) && !options[:only_path]
if %r{^/?www} =~ options[:controller]
options[:host] = i18n_host
end
end
super
end
end
OurApplication::Application.routes.extend I18nWwwUrlFor
在Rails 4下,这不起作用。这是因为命名路由现在直接调用ActionDispatch::Http::URL.URL_,它接受选项并生成URL。理想情况下,我希望扩展此url,但没有任何钩子可以这样做,所以我只剩下使用alias\u方法\u链进行monkey修补。我是不是遗漏了什么?有没有更好的方法可以做到这一点?我在Rails 4应用程序的子域中使用了以下内容:
module UrlHelper
def url_for(options = nil)
if options.is_a?(Hash) && options.has_key?(:subdomain)
options[:host] = host_with options.delete(:subdomain)
end
super
end
def host_with(subdomain)
subdomain += '.' unless subdomain.blank?
[ subdomain, request.domain, request.port_string ].join
end
end
请确保在应用程序_controller.rb中正确包含帮助程序,否则它将无法在控制器和视图中工作
include UrlHelper
helper UrlHelper
要更改子域时,请指定它
root_path(subdomain: 'ja')
嗯,只有路径帮助程序调用url。我们使用的是url,它不再通过url进行访问。因此,根路径将按您所示工作,但根url不会。您使用
\u url
方法的原因是什么?因为您通常在需要完整url时使用_url,而_路径是相对路径。