Сортировать по порядку выбора - PullRequest
1 голос
/ 23 ноября 2011

Это должно быть простой проблемой, но я просто не могу найти хорошее решение. У меня есть список идентификаторов, которые выбирает пользователь, и я хочу сохранить этот порядок для foos.

foo_ids = [1899, 7, 1, 2, 3, 42]

foos = Foo.find(foo_ids)

Любые идеи о том, как сохранить порядок при выборе или прибегнуть после возврата набора результатов?

1 Ответ

1 голос
/ 23 ноября 2011

Я не думаю, что есть способ сделать это с 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

Потому что он производит запрос для каждого идентификатора.

Извините, что не знаю идеального ответа; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...