5

我有一个关于 searchkick 的非常基本的问题。如果您希望使用 if 语句在 searchkick 查询中加入多个 where 语句怎么办。很像查询构建器

    @product = Product.all

    unless request.end_date.nil?
        @product = @product.search, where('created_at <= ?', request.end_date)
    end 

    unless request.max_price.nil?
        @product = @product.search, where('price <= ?', request.max_price)
    end 

    @product

如果请求具有结束日期或 max_price,则上述代码可以正常工作。如果两者都有,则会引发错误。有没有办法构造或连接两个 where 语句。我不能做

Product.search '*', where('created_at <= ?', request.end_date), where('price <= ?', request.max_price)

因为 if 语句很重要。

4

1 回答 1

5

您应该检查 Searchkick 的文档,它有或过滤器:https ://github.com/ankane/searchkick

where: {
  expires_at: {gt: Time.now}, # lt, gte, lte also available
  or: [
    [{in_stock: true}, {backordered: true}]
  ]
}

对于您的情况,您可以按以下方式处理:

conditions[:or] = [[]]
unless request.end_date.nil?
    conditions[:or][0] += [{created_at: {lt: request.end_date}}]
end 

unless request.max_price.nil?
    conditions[:or][0] += [{price: {lt: request.max_price}}]
end 
Product.search '*', where: conditions
于 2014-12-08T09:48:11.980 回答