Я пытаюсь создать расширенный поиск для моей модели кандидата.
Давайте представим, что у него есть пара полей + несколько ассоциаций, таких как has_many: languages
& has_many: skills
. Сейчас я строю запрос так:
query = Candidate.select("*")
if position_name
query = query.where('position_name LIKE ? OR position_name IS NULL',"%#{position_name}%")
end
if salary
query = query.where('salary <= ? OR salary IS NULL',salary)
end
и так далее ...
Теперь я хочу добавить более сложные условия, такие как поиск пользователей, у которых есть только такие навыки, как PHP
и Java
(поэтому возвращаются только те пользователи, у которых есть оба навыка)
Это работает, но только когда я вставляю OR
query = query.joins(:skills)
query = query.where('`skills`.`name` = ? OR `skills`.`name` = ?',"Java","PHP")
Кроме того, я хотел бы то же самое для языков (плюс, язык имеет language.name
& language.level
)
Может кто-то указывает мне, в каком направлении смотреть? А также как построить такое условие, когда я могу использовать несколько навыков или несколько языков?