2014-05-09 2 views
1

Rails URL 도우미를 사용하여 프로토콜 상대 URL을 생성하려고합니다. 이를 위해 프로토콜 옵션을 false로 설정했습니다. 그러나 URL을 생성 할 때마다 port 부분이 없습니다.프로토콜 상대 URL이 Rails URL 도우미에서 포트가 누락되었습니다.

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

이것은 의도적 인 것 같습니다.

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 당신이 구축하고자하는 URL 문자열 인 끝 : url.rb에서 코드가있다. 당신이 options[:protocol] 특별히 관계없이 port 옵션을 제공 특별히 host 옵션 포트를 포함할지 여부의 niloptions[:protocol] == '//' 경우 반환에 protocol: false

normalize_port 다음 보이는 설정하면

이제 normalize_protocol\\를 반환합니다.

이 순서로 정규화를 수행하면 핵심 코드에서 원하는 것만 큼 불가능 해 보입니다.

이것이 감독인지 또는 의도적인지 여부는 알 수 없습니다. 아마 당신은 프로토콜없이 포트를 가질 수 없다고 생각됩니다. 어쨌든 Rails에서 문제를 제기 할 가치가 있습니다.

그동안 gsub으로 해결할 수 있습니다. 훌륭하지는 않지만 아마도 아무것도없는 것보다 낫다. 예 :

2.0.0-p247 :002 > tunnels_url(host: "0.0.0.0port", protocol: false).gsub('port',':3000') 
=> "//0.0.0.0:3000/tunnels" 
+0

감사합니다. 나는 이것을 위해 문제를 만들었다. https://github.com/rails/rails/pull/15043 – guiocavalcanti

+0

좋은 정보! +1 문제는 물론 풀 요청을하지 않습니다. –

+0

방금 ​​병합되었습니다. 감사합니다, 당신은 저에게 @ graeme-mclean을 영감을 받았습니다 :) – guiocavalcanti

관련 문제