首页 > 解决方案 > 如何在 Ruby 中使用 LIKE 进行搜索

问题描述

我在 keykill 表中有两条记录,名称为“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> 

标签: ruby-on-railssearchsql-like

解决方案


处理此问题的一种简单方法是

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所有术语。

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

如果您希望此搜索不区分大小写,where如果您使用的是 postgresql,则可以重写如下

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

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

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

推荐阅读