У меня две модели: Worker
и Skill
. У работника может быть несколько навыков. Каждый навык имеет свое название (например, «php», «веб-разработка» и т. д.)
В моей форме поиска я хочу иметь возможность фильтровать работников (с помощью searchkick) в соответствии с их навыками. Если в форме выбрано несколько навыков, результаты поиска должны включать только тех работников, у которых есть все навыки, которые были выбраны.
Я пробовал следующее:
worker.rb
has_many :worker_skills
has_many :skills, through: worker_skills
searchkick
scope :search_import, -> { includes(:skills) }
def search_data
{
skills_name: skills.pluck(:name)
}
end
skill.rb
has_many :worker_skills
has_many :workers, through: :worker_skills
workers_controller.rb
def index
...
@workers = Worker.search(
params[:q],
where: {
skills_name: params[:skills]
}
end
...
end
Это возвращает мне всех рабочих, у которых есть хотя бы один из выбранных навыков.
Пример:
Filters selected: ['php', 'ruby']
Result: All workers who either have 'php' - OR - 'ruby' as a skill.
Как я могу добиться того, чтобы возвращались только те работники, у которых есть оба навыка одновременно?
т.е. 'php' - И - 'рубин'