У меня есть две модели: 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
worker_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' - AND - 'ruby'