我试图只获取域名(例如:只获取'google',而不是.com或.uk等(。我遇到了一个简单的解决方案,但它说如果域为零,我就不能使用它(??(这是错误消息:
main.rb:7:in
domain_name':nil:NilClass(NoMethodError(的未定义方法"split">
这是我的代码:
require 'uri'
def domain_name(url)
URI.parse(url).host.split('.').first
end
请帮我找到这个解决方案。感谢
在调用split之前,只需将主机分配给一个变量即可检查主机是否为nil
:
def domain_name(url)
host = URI(url).host
split('.').first if host
end
如果你愿意,你也可以使用安全导航操作符&
(在Ruby 2.3中引入(
def domain_name(url)
URI.parse(url).host&.split('.')&.first
end
请注意,不使用此运算符是有原因的(代码不可读、难以调试错误等(https://www.theguild.nl/5-reasons-not-to-use-safe-navigation-operators了解更多详细信息。
如果找不到主机,这些解决方案将返回nil
。你也可以返回一个空字符串(或其他东西(来做类似的事情:
def domain_name(url)
host = URI(url).host
host ? split('.').first : ''
end
所有这些解决方案只帮助处理nil
,但您可能真的想检查一下如何在Ruby中解析url以获得主域?
最后,请注意,即使url
不是nil
:,host
也可以返回nil
URI.parse("hello").host #=> nil