2013-02-05 46 views
0

我在Person模型上執行查找。我使用一個ID數組作爲Find方法的輸入。該數組代表特定人員的祖先,數組的順序非常重要。我如何使查找結果的順序匹配數組輸入的順序

我希望查找結果(關係)與輸入祖先數組的順序相同。不幸的是,返回的結果按照ID(升序)的順序排序。有沒有辦法來防止這種行爲,並已按照ancestry_array的順序返回結果。

模型中沒有反映Ancestry順序的屬性,所以我沒有看到直接使用順序方法的方法。如果可能的話,我希望能夠在rails上使用ruby來實現這一點。

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

請看看這個線程http://stackoverflow.com/問題/ 866465/sql-order-by-the-value-list – jvnill

+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}}' – Kaeros

回答

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}} 
+0

Kaeros - 你的接近工作。非常感謝。 – Mutuelinvestor