按不同的顺序条件合并两个数组

时间:2016-10-20 17:41:37

标签: ruby-on-rails postgresql activerecord rails-activerecord

假设我有两个数组:

Apple.where(color: red).order(:date_picked)

Apple.where(color: green).order(:date_eaten)

如何在保持订单条件的同时合并两个数组?

总的来说,最终的合并列表按日期排序,而使用的日期是按先前的数组顺序标准排序的?

我可以针对不同条件在.order中设置例外吗?

1 个答案:

答案 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")

但在一次性查询中不需要详细程度。