Сортировка полученной коллекции из ActiveRecord или ThinkingSphinx

У меня есть два вопроса.

  1. Есть ли способ отсортировать коллекцию из ActiveRecord или Thinking Sphinx без повторного выбора всего из базы данных/сфинкса? т.е.

    @models = Model.where("foo = :foo", {:foo => params[:foo]}) models.some_code_or_method_which_will_resort_everything

  2. Стоит ли эта игра свеч (сортировка массива/коллекции без повторной выборки)? Интересно, какой вариант лучше для производительности.

Заранее спасибо.

Изменить

Итак, эта игра стоит свеч, когда вы:

  • не используйте разбиение на страницы (у вас должны быть все записи)
  • обновить div страницы с помощью ajax (не извлекать все снова с помощью вызова индекса или показа действия)

Искусство ради искусства..


person nothing-special-here    schedule 11.08.2011    source источник


Ответы (1)


Я почти уверен, что sort должна работать:

  @models.sort! { |a,b| a.foo <=> b.foo }

Отвечая на второй вопрос, да, есть. Это в значительной степени зависит от количества объектов в вашей коллекции, но обычно это выигрыш в производительности.

person Vlad Khomich    schedule 11.08.2011
comment
Можете ли вы не сортировать как часть вызова базы данных/Сфинкса? Таким образом, DB/Sphinx сделает всю тяжелую работу за вас (и, вероятно, будет быстрее, чем ваш код на Ruby). Это также означает, что результаты поиска с разбивкой на страницы будут сортироваться затем разбиваться на страницы. - person pat; 11.08.2011
comment
изначально БД будет сортировать быстрее. Но если вам нужен тот же набор данных, но в другом порядке, вам понадобится еще один запрос, который является как db, так и ruby ​​orm. Это определенно медленнее, чем просто рубиновая сортировка - person Vlad Khomich; 11.08.2011