使用带有空值的'eq'谓词,Ransack将取消该谓词.在您的选择中选择"全部"选项显然很方便.
但是如果我想在我的<select>for null值中添加一个选项呢?为了说明如何SELECT * FROM spree_orders WHERE order_cycle_id = NULL使用'eq'谓词生成SQL查询.
我的测试代码(带结果)如下.我想要的是过滤掉Order那里的sorder_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]
Run Code Online (Sandbox Code Playgroud)
第二个选项是我想添加到我的选择中.我试过'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>
Run Code Online (Sandbox Code Playgroud)
在控制台中试试这个:
Spree::Order.search(order_cycle_id_null: true)
Run Code Online (Sandbox Code Playgroud)
在html视图集中然后在你的控制器中更改ransack查询
| 归档时间: |
|
| 查看次数: |
3500 次 |
| 最近记录: |