Как искать, используя как в рубине - PullRequest
0 голосов
/ 06 января 2019

У меня есть 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> 

1 Ответ

0 голосов
/ 07 января 2019

Простой способ справиться с этим - что-то вроде

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}%'")     
...