Я не думаю, что есть способ сделать это с 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, потому что в любом случае ваша область по умолчанию не та, которую вы хотите. Так что это может быть немного (очень немного) немного быстрее.
Использование find (people_ids) создает только один запрос независимо от того, насколько велик people_ids
Худшее было бы сделать что-то вроде этого:
people_ids.each_with_object(result = []) do |id, result|
result << Person.find(id)
end
Потому что он производит запрос для каждого идентификатора.
Извините, что не знаю идеального ответа; -)