协议相对URL缺少Rails URL帮助程序中的端口

时间:2014-05-09 13:39:52

标签: ruby-on-rails url routes urlhelper

我正在尝试使用Rails URL帮助程序生成协议相对URL。为此,我将协议选项设置为false。但每当我生成一个URL时,port部分都会丢失。

dashboard (master) > rails c
Loading development environment (Rails 4.0.3)
2.0.0p247 :001 >   include Rails.application.routes.url_helpers
 => Object
2.0.0p247 :002 > tunnels_url(host: "0.0.0.0:3000", protocol: false)
 => "//0.0.0.0/tunnels"

问题是:我想生成协议相对URL,但是需要自定义端口。

1 个答案:

答案 0 :(得分:1)

这似乎是故意的。从url.rb开始,代码为:

options[:protocol] = normalize_protocol(options)
options[:host]     = normalize_host(options)
options[:port]     = normalize_port(options)

result << options[:protocol]
result << rewrite_authentication(options)
result << options[:host]
result << ":#{options[:port]}" if options[:port]

result最终成为您要构建的网址字符串。

现在,如果您设置normalize_protocol

\\将返回protocol: false

normalize_port然后查看options[:protocol]专门返回nil options[:protocol] == '//' host,无论您是在port选项中包含该端口,还是具体提供gsub 1}}选项。

按照这个顺序进行规范化,你想要的核心代码似乎是不可能的。

我不知道这是疏忽还是故意。也许你认为没有协议就没有端口。无论如何,使用Rails提出问题可能是值得的。

与此同时,您可以使用2.0.0-p247 :002 > tunnels_url(host: "0.0.0.0port", protocol: false).gsub('port',':3000') => "//0.0.0.0:3000/tunnels" 解决此问题。没有辉煌,但可能总比没有好。类似的东西:

{{1}}