我在键技能表中有2条记录,名称分别为“ 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>
答案 0 :(得分: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}%'")