在 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?
我有下一个控制器操作:
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?