Простой способ справиться с этим - что-то вроде
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}%'")