0

我的 urlSearch 模型中有以下代码:

def find_url(orig_url)
    url = find_by(url: orig_url)
    unless url
        # some stuff
    end
end

在这里 find_by 将搜索传递给它的确切字符串,orig_url在我的例子中是 : 参数。

例如,如果在我的表中我有一个类似 : 的 url www.stackoverflow.com,并且如果我搜索http://stackoverflow.comor http://www.stackoverflow.com,它不是同一个字符串,这意味着find_by它将返回 nil。

有没有办法告诉find_by忽略http://www.搜索时?

4

2 回答 2

1

我没有看到直接的方法来做到这一点。首先,您必须从字符串中提取主机,然后www如果存在则将其删除。

>> string = 'http://www.foobar.com'
>> host = URI.parse(string).host # www.foobar.com
>> host.gsub!(/^www\./, '') #foobar.com
>> MyModel.where('url LIKE ?', "%#{host}%").first

如果您不控制存储在数据库中的值,则应该使用LIKE(或用于 postgresql)。ILIKE你不能find_by在这种情况下使用,因为它总是会找到完全匹配的。

于 2013-11-26T01:57:57.537 回答
1

你可以做url = find_by(url: orig_url.gsub("http://" , ""))

你需要另一个 gsub"www."

于 2013-11-26T01:52:16.413 回答