2013-09-11 142 views
3

使用具有空值的'eq'謂詞,Ransack將取消該謂詞。在你的選擇中有一個「全部」選項顯然很方便。使用Ransack'eq'謂詞搜索空值

但是如果我想要在我的<select>中添加一個選項也爲空值?爲了說明如何使用'eq'謂詞產生SQL查詢SELECT * FROM spree_orders WHERE order_cycle_id = NULL

我的測試代碼(含結果)如下。我想是濾除Order S其中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] 

第二個選項是想什麼我添加到我的選擇。我試過「空」,「零」,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> 
+0

你是問在'Spree :: Order.search(order_cycle_id_eq:nil)'裏面放置什麼而不是'nil',或者你問''option value =「裏面用什麼來代替'???'? 「>'?它們不一定必須是相同的。當然,這樣會很好,但是你總是可以有'

+0

Both:選項值將傳遞給'.search(order_cycle_id_eq:value)'中的值。我已經更新了我的問題來持續使用'nil'作爲例子。 –

回答

6

在控制檯試試這個:

Spree::Order.search(order_cycle_id_null: true) 

在HTML視圖集,然後在你的控制人變更情況洗劫查詢

+0

這就是我最終做的一個工作:例如「if params [:order_cycle_id] =='null'then order_cycle_id_null:true」 –