Using the 'eq' predicate with a blank value, Ransack will cancel out that predicate. Which is obviously handy to have an "All" option in your select.
But what if I want to add an option in my <select>
for null values too? In order words how to produce the SQL query SELECT * FROM spree_orders WHERE order_cycle_id = NULL
using the 'eq' predicate.
My test code (with results) is below. What I would like is to filter out the Order
s where 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]
The second option is what I'd like to add to my select. I've tried 'null', 'nil', nil
, etc..
<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>
nil
inSpree::Order.search(order_cycle_id_eq: nil)
or are you asking what to put instead of???
in<option value="???">
? They don't necessarily have to be the same. Sure, it would be nice, but you can always have<option value="none">
and then haveif params[order_cycle_id_eq] == 'none'
and pass something else. I don't know whatRansack
is though. – Burch.search(order_cycle_id_eq: value)
. I've updated my question to consistently usenil
as the example. – Fleshings