问题
To perform a range query we follow something akin to the syntax below -:
oms[:order_items].where(:internal_sla => 3..5) results in this query
=> #<Sequel::Mysql2::Dataset: "SELECT * FROM `order_items` WHERE ((`internal_sla` >= 3) AND (`internal_sla` <= 5))">
But how can I change the active record query to give me something like this => select internal_sla from order_items where (internal_sla<=3 and internal_sla>=0) OR (internal_sla<=15 and internal_sla>=10)
回答1:
.where("(internal_sla >= ? AND internal_sla <= ? OR
internal_sla >= ? AND internal_sla <= ? )", 0, 3, 10, 15).pluck(:internal_sla)
UPDATE after comment:
If internal_sla is integer, you can:
.where(:internal_sla => (0..3).to_a + (10..15).to_a).pluck(:internal_sla)
edit: fixed typo
回答2:
This works
oms[:order_items].where(:internal_sla => [0..3, 10..15])
来源:https://stackoverflow.com/questions/15517286/transformation-of-query-to-active-record