ActiveRecord find_all_by_X是否保留顺序?如果没有,应该使用什么?

hof*_*ffm 3 activerecord ruby-on-rails

假设我有一个非空idsThing对象id 数组,我想找到相应的对象things = Thing.find_all_by_id(ids).我的印象是,things不一定会有类似的顺序ids.

  1. 我的印象是否正确?

  2. 如果是这样,我可以使用什么而不是find_all_by_id保留订单并且不会多次不必要地访问数据库?

tyb*_*103 7

  1. 使用Array#sort

看看这个:

Thing.where(:id => ids).sort! {|a, b| ids.index(a.id) <=> ids.index(b.id)}
Run Code Online (Sandbox Code Playgroud)

where(:id => ids)将使用一个生成一个查询IN().然后排序!方法将遍历查询结果并比较ids数组中id的位置.