defreorder(things, ids)
ordered_things =Array.new(things.size)
unless things.size== ids.size
(ids - (things.collect{|x| x.id})).collect{|missing| ids[ids.index(missing)] =nil}
ids = ids.compactendraise"Out of sync! Found #{ids.size} items in index, but only #{things.size} were found in database! Remove #{(ids - (things.collect{|x| x.id})).to_sentence}."unless things.size== ids.size
things.eachdo |thing|
position = ids.index(thing.id)
ordered_things[position] = thing
end
ordered_things
end