【问题标题】:How to search using LIKE in Ruby如何在 Ruby 中使用 LIKE 进行搜索
【发布时间】:2019-06-01 08:03:27
【问题描述】:

我在名为“SAP FICO”和“FICO SAP”的键技能表中有两条记录。当我用“FICO SAP”搜索记录时。我想同时获得这两个记录。如果我搜索,有什么方法可以获取此记录?

如果我搜索,我想要这两个结果,我尝试使用如下所示,但它只获取一个。

    search = "FICO SAP"
    KeySkill.where("name LIKE ?", "%#{search}%")

这是我的 Keyskill 表数据(在表中这样创建)

 <KeySkill id: 50, name: "SAP FICO", relevant_experience: "1", created_at: "2019-01-06 08:48:54", updated_at: "2019-01-06 08:48:54", deleted_at: nil> 
<KeySkill id: 51, name: "FICO SAP", relevant_experience: "1", created_at: "2019-01-06 08:48:55", updated_at: "2019-01-06 08:48:55", deleted_at: nil> 

【问题讨论】:

  • 您使用的是什么数据库?有一些全文搜索 gem 使用起来非常简单。

标签: ruby-on-rails search sql-like


【解决方案1】:

处理这个问题的一个简单方法是

search_term = "FICO SAP" 
terms = search_term.split 

filtered_skills = KeySkill 
terms.each do |t| 
  filtered_skills = filtered_skills.where("name like '%#{term}%'") 
end 

然后只需使用filtered_skills 来检索它们。

这适用于原始搜索词的每个部分必须以随机顺序出现的情况。所以我们可以对所有术语使用and

[编辑:如果你想搜索不区分大小写]

如果你想让这个搜索不区分大小写,如果你使用的是postgresql,你可以重写where如下

.where("name ilike '%#{term}%'") 

(ilike = 不区分大小写的 LIKE)。但是这种方法只存在于postgresql,所以 对于任何其他数据库,您将使用以下内容:

.where("lower(name) like '%#{term.downcase}%'")     

【讨论】:

  • 如果你使用PostgreSQL,最好使用ILIKE
  • 好点!我扩展了我的答案以展示如何进行不区分大小写的搜索,如果 OP 会发现这很有用(实际上总是看起来很聪明?)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 2012-03-13
  • 2013-07-24
相关资源
最近更新 更多