ruby-on-rails - 在同一个 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
然后,用户选择“学校”和“水果”,结果应该是一个列表:
笔记本、铅笔、钢笔、白板等
香蕉、梨、葡萄、苹果等
目前我有几个不同的过滤器,我只是把“类别”来显示问题,我设法按所有过滤器过滤结果,但每个过滤器只过滤一次。
如何处理过滤器以允许对同一过滤器进行两次选择?
谢谢!
版本:
Rails 6.0.1
Ruby 2.6.5
Searchkick 4.1.1
解决方案
您应该能够通过简单地将一组值传递给args[:category_name]
.
您可以设置搜索表单,以便params[:category_name]
返回多个选择的数组,并且它应该可以正常工作。为了安全起见,我们可以在必要时将值强制转换为数组,如下所示:
args[:category_name] = Array(params[:category_name]) if params[:category_name].present?
推荐阅读
- c# - 有没有办法更新表上的任何列组合?
- python - 使用python pandas读取已分成多行的行
- sql-server - 测试 varchar 字段是否有任何数字的性能优化方法(SQL Server 2012)
- css - 有没有办法格式化 node-sass css 输出?
- python - 为什么 Python 3 发现这个 ISO8601 日期:“2019-04-05T16:55:26Z”无效?
- google-apps-script - 如何消除对 Google 表格中按钮的 Google 脚本代码的权限
- image - 如何将多张图片拼接成一张图片?
- javascript - 更改 url 结尾以反映当前月份的脚本 Ex 04/01/2019
- braintree - Braintree:搜索订阅交易
- r - R中的动画GIF在每个间隔中丢失3毫秒