【发布时间】:2019-02-16 17:30:20
【问题描述】:
我有两个模型:Worker 和 Skill。
一个工人可以拥有多种技能。每个技能都有自己的名称(例如“php”、“web-development”等)
在我的搜索表单中,我希望能够根据他们的技能过滤工人(在 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
技能.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' - 和 - 'ruby'
【问题讨论】:
标签: ruby-on-rails elasticsearch searchkick