gpt4 book ai didi

ruby-on-rails - 如何使用SearchKick全面过滤结果(AND)

转载 作者:行者123 更新时间:2023-12-02 23:16:05 25 4
gpt4 key购买 nike

我有两个模型:WorkerSkill
一个 worker 可以有多种技能。每个技能都有自己的名称(例如“php”,“web-development”等)

在我的搜索表中,我希望能够(根据searchkick的技能)过滤 worker 。如果在表格中选择了多种技能,则搜索结果应仅包括具有所有所选技能的那些 worker 。

我尝试了以下方法:

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

这使我获得了至少具有所选技能之一的所有 worker 。

例:
Filters selected: ['php', 'ruby']
Result: All workers who either have 'php' - OR - 'ruby' as a skill.

我如何才能做到只让同时拥有这两种技能的那些 worker 返回呢? 'php'-AND-'ruby'

最佳答案

如果在这里查看https://github.com/ankane/searchkick#querying,则可以使用all参数,使其必须与where子句中的所有元素匹配。在 worker_controller.rb 中执行以下操作:

def index
...
@workers = Worker.search(
params[:q],
where: {
skills_name: {
all: params[:skills]
}
}
end
...
end

还要记住确保在 params[:skills]中有值。如果不是,您将得到nil:NilClass 错误的 未定义方法“each”。因此,可能禁用搜索按钮,直到选择了一些值。

关于ruby-on-rails - 如何使用SearchKick全面过滤结果(AND),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54725793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com