简体   繁体   English

将查询转换为活动记录

[英]Transformation of query to active record

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) 但是如何更改活动记录查询以给我这样的东西=> select internal_sla from order_items where (internal_sla<=3 and internal_sla>=0) OR (internal_sla<=15 and internal_sla>=10)

.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: 如果internal_sla是整数,您可以:

.where(:internal_sla => (0..3).to_a + (10..15).to_a).pluck(:internal_sla)

edit: fixed typo 编辑:修正错字

这有效

oms[:order_items].where(:internal_sla => [0..3, 10..15])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM