【问题标题】:How to ignore "http://" and "www." when i search an url using ActiveRecord如何忽略“http://”和“www”。当我使用 ActiveRecord 搜索 url
【发布时间】:2013-11-26 01:39:04
【问题描述】:

我的 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.comhttp://www.stackoverflow.com,它不是同一个字符串,这意味着 find_by 将返回 nil。

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

【问题讨论】:

  • 忽略输入或存储的数据?
  • 存储的数据,例如在我的数据库中我有 www.foobar.com 并且我的搜索是“foobar.com”,它将返回一个结果

标签: ruby-on-rails ruby clean-urls no-www


【解决方案1】:

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

你还需要另一个 gsub 用于 "www."

【讨论】:

    【解决方案2】:

    我没有看到直接的方法来做到这一点。首先,您必须从字符串中提取主机,然后删除 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(或 ILIKE 用于 postgresql)。在这种情况下,您不能使用 find_by,因为它总是会找到完全匹配的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 2017-12-24
      • 2012-06-05
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多