Ruby uri模块解析生成nil

时间:2016-05-24 15:14:24

标签: ruby-on-rails ruby uri

我的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

2 个答案:

答案 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