我的ruby文件正在使用Ruby uri
模块:
require 'uri'
def parse_uri(uri) # uri => www.google.com
uriParsed = URI(uri) # uriParsed => <URI::Generic 0x000000000 URL:www.google.com>
uriHost = uriParsed.host # uriHost => nil
documentation中所述的预期行为应为google.com
生成uriHost
。但事实并非如此;我尝试重新启动我的Rails服务器,运行bundle install
,并要求uri/http
,但无济于事。有什么想法吗?
Ruby版本为2.1.4,rails版本为4.0.1
答案 0 :(得分:1)
您需要指定协议:
parse_uri('http://www.google.com')
答案 1 :(得分:0)
您忘记在.path
上致电URI
:
require 'uri'
def parse_uri(uri) # uri => www.google.com
uriParsed = URI.parse(uri) # uriParsed => <URI::Generic 0x000000000 URL:www.google.com>
uriHost = uriParsed.path# uriHost => nil
OR。
def parse_uri(uri) # uri => www.google.com
uriParsed = URI.parse(uri).path
实际上URI(uri)
返回的对象与使用.parse
调用它的对象相同,所以看起来有点多余。以下是使用.path
代替.host
的原始方法:
def parse_uri(uri) # uri => www.google.com
uriParsed = URI(uri) # uriParsed => <URI::Generic 0x000000000 URL:www.google.com>
uriHost = uriParsed.path# uriHost => nil
最后,如果您想要省略www.
前缀,如果网址包含它,您可以执行以下操作:
require 'uri'
def parse_uri(uri) # uri => www.google.com
uriParsed = URI(uri) # uriParsed => <URI::Generic 0x000000000 URL:www.google.com>
uriHost = uriParsed.path# uriHost => nil
uriHost.start_with?('www.') ? uriHost[4..-1] : uriHost
end