首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails将集合划分为相等的部分,对每个部分进行排序并连接在一起

Rails将集合划分为相等的部分,对每个部分进行排序并连接在一起
EN

Stack Overflow用户
提问于 2020-09-23 07:15:02
回答 1查看 41关注 0票数 0

我想提取我的Product.where(in_stock: 0)Product.where.not(in_stock: 0)。然后,我想按price ASC对集合的每个部分进行排序,并将它们连接在一起,以便首先显示库存中排序的项目,然后显示脱销的项目。

应该有适用于AR关系的有效.merge,但它在Rails 5.2.X上不起作用

此外,Rails5在按it排序数组查找方面做得很好,但它返回的是Array而不是AR关系。

有没有办法写出干净和可维护的工作代码?常用的Postgres变通方法会在包含> 100个实例的集合中失败。

有没有关于如何用纯SQL实现它的想法?

EN

回答 1

Stack Overflow用户

发布于 2020-09-23 09:58:26

使用ORDER在1个查询中获取它怎么样?

代码语言:javascript
运行
复制
ORDER BY case in_stock when 0 then 2 else 1 end, net_price ASC

这将把所有in_stock: 0记录推到底部。

要使用AR查询,请执行以下操作

代码语言:javascript
运行
复制
Product.all.order(Arel.sql("ORDER BY case in_stock when 0 then 2 else 1 end, net_price ASC"))

我使用Arel.sql是因为有一个不推荐使用的警告:

代码语言:javascript
运行
复制
Dangerous query method (method whose arguments are used as raw SQL) called with non-attribute argument(s)

Reference to deprecation

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64018881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档