假设我有两个数组:
Apple.where(color: red).order(:date_picked)
和
Apple.where(color: green).order(:date_eaten)
如何在保持订单条件的同时合并两个数组?
总的来说,最终的合并列表按日期排序,而使用的日期是按先前的数组顺序标准排序的?
我可以针对不同条件在.order中设置例外吗?
答案 0 :(得分:2)
同时查询两种颜色:
Apple.where(color: %w[red green])
然后在order
调用中使用CASE语句,根据color
选择要排序的列:
Apple.where(color: %w[red green])
.order("case color when 'red' then date_picked when 'green' then date_eaten end")
您可以ORDER BY
任意表达。
如果您认为这可能最终会出现在更大的查询链中(可能涉及JOIN),那么您可能希望限定列名:
Apple.where(color: %w[red green])
.order("case apples.color when 'red' then apples.date_picked when 'green' then apples.date_eaten end")
但在一次性查询中不需要详细程度。