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

时间:2013-09-11 00:18:15

标签: ruby ransack

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

但是,如果我想在我的<select>中为空值添加选项,该怎么办?为了说明如何使用'eq'谓词生成SQL查询SELECT * FROM spree_orders WHERE order_cycle_id = NULL

我的测试代码(带结果)如下。我想要的是过滤出Order <{1}}

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等等。

<select id="q_order_cycle_id_eq" name="q[order_cycle_id_eq]">
  <option value="">All</option>
  <option value="nil">No Order Cycle</option>
  <option value="1">Order Cycle 1</option>
  <option value="2">Order Cycle 2</option>
</select>

1 个答案:

答案 0 :(得分:7)

在控制台中尝试:

Spree::Order.search(order_cycle_id_null: true)

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