我从数据库列获取不同URL的数组。两者都用于在网址上应用白名单(例如www.example.com/test/page.html)。一个是网址开头,一个是结尾。
Pointer
在我将url插入数据库之前,我想检查save_url是否为true。之后,将插入过滤后的URL。 url可以启动(例如www.example.com/test)或以url结尾(例如page.html)。但整个白名单也可以同时为空。这三件事之一。
whitelist_start = self.domain.whitelists.map(&:url_start)
whitelist_end = self.domain.whitelists.map(&:url_end)
我在starts_with中使用数组名之前的*?和ends_with?因为我想在那里插入所有数组值。但是,如果一个数组为空(完全没问题),我会收到此错误,无法继续。
save_url = url.starts_with?(*whitelist_start) || url.ends_with?(*whitelist_end) || whitelist_start.empty? || whitelist_end.empty?
有没有办法解决这个问题?
答案 0 :(得分:4)
这是因为您的阵列上有一个零位置,请尝试此
whitelist_start = self.domain.whitelists.map(&:url_start).compact
whitelist_end = self.domain.whitelists.map(&:url_end).compact
我会告诉你,你的数组不是空的
2.3.1 :017 > test = []
=> []
2.3.1 :019 > "string".starts_with?(*test)
=> false
现在,您的nil
数组位置
2.3.1 :020 > test = [nil]
=> [nil]
2.3.1 :021 > "string".starts_with?(*test)
TypeError: no implicit conversion of nil into String
在我的测试中,只有nil
位于第一个位置时才会出现此错误