【问题标题】:Filter two data in the same Bucket Searchkick Ruby on Rails在同一个 Bucket 中过滤两个数据 Searchkick Ruby on Rails
【发布时间】:2019-11-21 22:24:32
【问题描述】:

我有下一个控制器动作:

  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

【问题讨论】:

    标签: ruby-on-rails ruby searchkick


    【解决方案1】:

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

    您可以设置您的搜索表单,以便您的 params[:category_name] 返回一个包含多个选择的数组,并且它应该可以正常工作。为了安全起见,我们可以在必要时将值强制转换为数组,如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 2011-05-20
      相关资源
      最近更新 更多