我有一组id,存储在一些外部存储(rails cache或redis)中。在控制器的操作中,我获取此数据并使用它选择对象,即
ids = [5, 1, 17, 84] # really fetched from external source
result = MyModel.where(:id => ids)
我也希望它的顺序与array_of id中的id相同:
ids == result.map(&:id) # => true
作为解决方法,我使用mysql FIELD函数排序:
MyModel.where(:id => ids).order("FIELD(id, #{ids.join ', '})")
但我不喜欢这种方法,因为它是特定于mysql的,并且在大的情况下创建非常长的查询 ids
阵列。
有没有更好的,与DB无关的方法呢?从数据库获取未分类的数据并在ruby端进行排序是不可取的,因为它资源昂贵并且难以与分页一起使用。
谢谢。