ActiveRecord:首先按ID或列值排序,其余查询函数相同



我正试图编写一个ActiveRecord查询,在那里我需要列的某些值在查询的其余部分之前。例如:

如果我在一个表中有6条记录,但我想要2条不同id的记录在查询的其余部分之前

这是一个记录集:

[{id: 1},{id: 2},{id: 3},{id: 4},{id: 5},{id: 6}]

我想输出:

[{id: 3},{id: 5},{id: 1},{id: 2},{id: 4},{id: 6}]

注意3和5在开头

我该如何在活动记录中写这些呢?

提前感谢。

不知道在示例中使用哪个标准对id为3和5的项进行排序,但假设您在开头添加了一个相同排序的组,您可以这样做:

# let's say 'items' are the ActiveRecord items that you want to order
prepended_ids = [3,5]
items.order("CASE WHEN (id IN (#{prepended_ids.join(',')})) THEN 0 ELSE 1 END ASC, id")

注意,如果prepended_ids是空的,这将不起作用,所以完整的解决方案将是:

prepended_ids = [3,5]
items.order("#{"CASE WHEN (id IN (#{prepended_ids.join(',')})) THEN 0 ELSE 1 END ASC" if prepended_ids.present?}, id")

最新更新