6

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

但是,如果我也想在我的 for null 值中添加一个选项<select>怎么办?换句话说,如何SELECT * FROM spree_orders WHERE order_cycle_id = NULL使用 'eq' 谓词生成 SQL 查询。

我的测试代码(带结果)如下。我想要的是过滤掉Orders whereorder_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>
4

1 回答 1

8

在控制台中试试这个:

Spree::Order.search(order_cycle_id_null: true)

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

于 2013-11-06T11:40:10.287 回答