1
這應該是一個簡單的問題,但我似乎無法找到一個好的解決方案。我有一個用戶正在選擇的id列表,我想保留foos的順序。按選擇順序排序
foo_ids = [1899, 7, 1, 2, 3, 42]
foos = Foo.find(foo_ids)
關於如何保留select或select返回結果集之後的命令的任何想法?
這應該是一個簡單的問題,但我似乎無法找到一個好的解決方案。我有一個用戶正在選擇的id列表,我想保留foos的順序。按選擇順序排序
foo_ids = [1899, 7, 1, 2, 3, 42]
foos = Foo.find(foo_ids)
關於如何保留select或select返回結果集之後的命令的任何想法?
我不認爲有辦法做到這一點與ActiveRecord。
然而,這裏是我會做什麼:
people_ids = [1899, 7, 2, 3, 42]
people = Person.unscoped.find(people_ids)
people_ids.each_with_object(result = []) do |id, result|
result << people.detect { person.id == id }
end
result # => what you are looking for
我使用Person.unscoped因爲在任何情況下,您的默認範圍是不是你想要的。所以它可能會稍微快一點。
無論people_ids有多大,使用find(people_ids)只會產生一個查詢。 最糟糕的是做這樣的事情:
people_ids.each_with_object(result = []) do |id, result|
result << Person.find(id)
end
,因爲它產生的每一個ID查詢。
對不起,沒有完美的答案;-)
感謝您的迴應德爾巴,我肯定會給那個w旋轉,感謝您的輸入! –
謝謝,這大致是解決方案。我調整了一下,但我相信這樣做也可以。 –