按多个值或 nil 搜索过滤器

Ransack filter by multiple values or nil

我有一个 API 使用 jsonapi.rb 和 Ransack 编写的。

我的模型有一个 Carcolor 属性,它是一个整数或零。 我希望能够通过多个颜色数字或空值来过滤此属性。它看起来像这样:

/cars?filter[color_in]=1,2,nil

Ransack 可以按多个值搜索,也可以按空值过滤。 但是我怎样才能在这里将空值传递给 Ransack?

一个简单的方法是将空值转换为另一个值并按它进行搜索。 在我的例子中,column 是一个整数,所以我想将 null 转换为 0 对于我想过滤的所有属性。

添加到模型:

ransacker :color do
  Arel.sql('COALESCE(color, 0)')
end

然后搜索:

/cars?filter[color_in]=1,2,0

所以查询将如下所示:

WHERE COALESCE(color, 0) IN ('1', '2', '0')