Rails:没有将nil隐式转换为String

时间:2016-07-21 14:18:58

标签: ruby-on-rails arrays ruby string null

我从数据库列获取不同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?

有没有办法解决这个问题?

1 个答案:

答案 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位于第一个位置时才会出现此错误