使用Ransack’eq’谓词搜索空值

使用带有空值的’eq’谓词,Ransack将取消该谓词。 在您的选择中选择“全部”选项显然很方便。

但是,如果我想在我的为空值添加一个选项呢? 顺序说明如何使用’eq’谓词生成SQL查询SELECT * FROM spree_orders WHERE order_cycle_id = NULL

我的测试代码(带结果)如下。 我想要的是过滤掉Order ,其中order_cycle_id == nil

 Spree::Order.search(order_cycle_id_eq: nil).result.map(&:order_cycle_id) Spree::Order Load (2.2ms) SELECT "spree_orders".* FROM "spree_orders" => [nil, 1, nil, nil, nil, nil, nil, nil, 1, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 4, nil, 4, nil, nil, nil, nil] 

第二个选项是我想添加到我的选择中。 我试过’null’,’nil’, nil等。

  All No Order Cycle Order Cycle 1 Order Cycle 2  

在控制台中试试这个:

 Spree::Order.search(order_cycle_id_null: true) 

在html视图集中然后在你的控制器中更改ransack查询