Wenn IDs sind eindeutig
können Sie verwenden index_by und values_at:
k = Photo.where(id: b).index_by(&:id).values_at(*b)
Beispiel:
b = [5,3,1]
Country.where(id: b)
#=> [#<Country id: 1, name: "France">, #<Country id: 3, name: "Ukraine">, #<Country id: 5, name: "Spain">]
Country.where(id: b).index_by(&:id)
#=> {1=>#<Country id: 1, name: "France">, 3=>#<Country id: 3, name: "Ukraine">, 5=>#<Country id: 5, name: "Spain">}
Country.where(id: b).index_by(&:id).values_at(*b)
#=> [#<Country id: 5, name: "Spain">, #<Country id: 3, name: "Ukraine">, #<Country id: 1, name: "France">]
Wenn b doppelte Ids
Mit b = [5,3,3,1]
enthält, die erste Methode würde ausgeben:
#=> [#<Country id: 5, name: "Spain">, #<Country id: 3, name: "Ukraine">, #<Country id: 3, name: "Ukraine">, #<Country id: 1, name: "France">]
können Sie verwenden index_by und slice:
k = Photo.where(id: b).index_by(&:id).slice(*b).values
mit:
b = [5,3,3,1]
Country.where(id: b)
#=> [#<Country id: 1, name: "France">, #<Country id: 3, name: "Ukraine">, #<Country id: 5, name: "Spain">]
Country.where(id: b).index_by(&:id)
#=> {1=>#<Country id: 1, name: "France">, 3=>#<Country id: 3, name: "Ukraine">, 5=>#<Country id: 5, name: "Spain">}
Country.where(id: b).index_by(&:id).slice(*b)
#=> {5=>#<Country id: 5, name: "Spain">, 3=>#<Country id: 3, name: "Ukraine">, 1=>#<Country id: 1, name: "France">}
Country.where(id: b).index_by(&:id).slice(*b).values
#=> [#<Country id: 5, name: "Spain">, #<Country id: 3, name: "Ukraine">, #<Country id: 1, name: "France">]
Natürlich könnten Sie auch mit b.uniq
Es sieht aus wie Ihre Antwort kann hier sein: http://stackoverflow.com/questions/11961685/sort-an-array-according-to-the-elements-of-another-array – jvillian
@jvillian Dank - Sie befinden sich Recht. Es gibt mehrere Vorschläge im Thread. Ich bin nicht mit der Antwort gegangen. Stattdessen ging ich mit dieser http://stackoverflow.com/a/25297497/3508526 – martin