Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Rails 4连接到url__Ruby On Rails - Fatal编程技术网

Ruby on rails 使用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]

我正在将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]
        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,而_路径是相对路径。