在 Rails 上过滤同一 Bucket Searchkick Ruby 中的两个数据

Filter two data in the same Bucket Searchkick Ruby on Rails

我有下一个控制器操作:

  def index
    query                = params[:query].presence || "*"
    args                 = {}
    args[:name]          = params[:name]          if params[:name].present?
    args[:category_name] = params[:category_name] if params[:category_name].present?

    @items = Item.search query, where: args, aggs: { category_name: {} }
  end

我需要按名称和类别过滤(完成)

但是,我还需要按两个不同的类别进行过滤,例如:

category: "School", items: Notebook, Pencil, Pen, Board, etc

category: "Fruit", items: Banana, Pear, Grape, Apple, etc

category: "Vegetable", items: Broccoli, Carrots, Corn, Potatoes, etc

然后,用户选择 "School" AND "Fruit" 结果应该是一个列表:

笔记本、铅笔、笔、板等

香蕉、梨、葡萄、苹果等

目前我有几个不同的过滤器,我只是放了 "category" 来显示问题,我设法通过所有过滤器过滤结果,但每个过滤器只过滤一次。

如何处理过滤器以允许对同一过滤器进行两次选择?

谢谢!

版本:

Rails 6.0.1

Ruby 2.6.5

Searchkick 4.1.1

您应该能够通过简单地将一组值传递给 args[:category_name] 来做到这一点。

您可以设置您的搜索表单,这样您的 params[:category_name] returns 一系列多项选择就应该可以正常工作。为了安全起见,我们可以在必要时将值强制转换为数组,如下所示:

args[:category_name] = Array(params[:category_name]) if params[:category_name].present?