Order of results from find(array)

Probably depends what the order of the array is. If it's arbitrary,
there is no easy way to get find's SQL to return the same order. So
probably the next best is just to cycle through each element of the
array and grab the corresponding record from what is returned by
find. If there's some way of describing the order in terms of the
underlying table (eg, by date), then use :order => condition with find.

Hi all,

I'm using find to query my database using an array of IDs that
represent
the records I want to pull. But when the results come back they are
in a
different order than that I requested them in.

For instance, I have this array of IDs:

ids = [6, 4, 1, 5, 2, 3]

I want to pull the records with these IDs from the database so I use:

@records = Model.find(ids)

The result from this query comes back in numerical order (which is
what
I don't want), so the records would be ordered:

[1, 2, 3, 4, 5, 6]

*not* what I want, I really want the same order: [6, 4, 1, 5, 2, 3]

is there any way to maintain the order of the records? So the order of
the IDs in the array I requested the records with?

Thanks in advance!

Probably depends what the order of the array is. If it's arbitrary,
there is no easy way to get find's SQL to return the same order. So
probably the next best is just to cycle through each element of the
array and grab the corresponding record from what is returned by
find. If there's some way of describing the order in terms of the
underlying table (eg, by date), then use :order => condition with find.

Use a sort_by on the results and the Array#index of the id from your original array of model IDs as the value on which to sort.

>> ids = [36, 27, 35]
=> [36, 27, 35]
>> products = Product.find ids
=> [...stuff...]
>> products.size
=> 3
>> products.map(&:id)
=> [27, 35, 36]
>> products.sort_by {|p| ids.index(p.id)}.map(&:id)
=> [36, 27, 35]
>> ids
=> [36, 27, 35]
>>

The result in "your" code is:

@records = Model.find(ids).sort_by {|m| ids.index(m.id)}

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com