如何使查找结果的顺序与数组输入的顺序相匹配

时间:2013-02-05 02:13:55

标签: ruby-on-rails ruby-on-rails-3

我在Person模型上执行查找。我正在使用一组id作为我的Find方法的输入。该数组代表特定人的祖先,并且数组的顺序很重要。

我希望查找结果(关系)与输入祖先数组的顺序相同。不幸的是,返回的结果按ids(升序)的顺序排序。有没有办法防止这种行为,并按照ancestry_array的顺序返回结果。

模型中没有反映Ancestry顺序的属性,因此我没有看到使用order方法的直接方法。如果可能的话,我希望用铁轨上的红宝石来实现这一点。

ancestry_array = Array.new

ancestry_array = [23,45,89,12,90,5]

Person.find(23,45,89,12,90,5)

returned order of relation: 5,12,23,45,89,90

desired order of returned relation: 23,45,89,12,90,5

1 个答案:

答案 0 :(得分:1)

我将在答案中转换上述评论。

我不知道你是否可以在SQL中做你想做的事,但如果这在你的情况下是有效的,你可以使用:

ancestry_array = [23,45,89,12,90,5] 
r = Person.find(ancestry_array) 
results = ancestry_array.map{|id| r.detect{|p| p.id == id}}