我可以按预定的顺序加载ActiveRecord-Objects吗?

时间:2011-12-13 14:08:28

标签: mysql ruby-on-rails ruby activerecord

是否可以构建像这样的范围

User.where(:id => [5,4,3,2,7,1000] )

在某种程度上,

a)结果按照传递的ID的顺序排列。 (这是一个简单的部分,因为您只需加载记录,并相应地对结果进行排序)

b)结果不是数组而是范围本身(棘手的部分;)

更新:欢迎仅适用于MySQL的解决方案。

2 个答案:

答案 0 :(得分:1)

我可以想到两种方法:

(1)在数据库中放置一个订单栏。

(2)使用原始SQL和自定义ORDER BY子句,如下所示:

order by (
    case id
    when 5 then 0 
    when 4 then 1
    when 3 then 2
    when 2 then 3
    when 7 then 4
    when 1000 then 5
    end
)

我不确定它有多便携。

答案 1 :(得分:0)

不同的数据库以不同的方式保存他们的数据,因此没有人能够确定地回答它的范围。

但是如果你真的挑战这个问题,为什么不使用原始SQL,选择每个元组并在构造一个长SQL查询时将它与union合并。