如何解决Rails将集合分成相等的部分,对每个部分进行排序并结合在一起
我想提取我的Product.where(in_stock: 0)
和Product.where.not(in_stock: 0)
。然后,我想按price ASC
对集合的各个部分进行排序,并将它们结合在一起,以查看先显示库存中的已排序项目,然后再显示库存中的未排序项目。
应将.merge
应用于AR关系,但不适用于Rails 5.2.X
此外,Rails 5可以很好地按ID的排序数组进行查找,但是它返回Array
而不是AR关系。
有什么方法可以编写干净且可维护的工作代码?流行的Postgres
解决方案因包含> 100个实例的集合而失败。
是否有关于如何使用纯SQL实现它的想法?
解决方法
如何在1个查询中而不是使用ORDER
来获得它。
ORDER BY case in_stock when 0 then 2 else 1 end,net_price ASC
这会将所有in_stock: 0
记录推到底部。
使用AR查询
Product.all.order(Arel.sql("ORDER BY case in_stock when 0 then 2 else 1 end,net_price ASC"))
我使用Arel.sql
,因为有弃用警告:
Dangerous query method (method whose arguments are used as raw SQL) called with non-attribute argument(s)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。