Сортировка массива, возвращаемого ActiveRecord по дате (или любому другому столбцу)


Как я могу отсортировать массив, возвращаемый запросом ActiveRecord с помощью created_at столбец с датой?

это происходит после выполнения запроса.

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

5   51   2009-08-14 19:24:34

5 ответов:

Ruby включает в себя поддержку сортировки из коробки.

sorted = @records.sort_by &:created_at

однако это, похоже, не имеет большого отношения к дисплею и, вероятно, принадлежит контроллеру.

Пока Руби перечисли является удивительным, запросы ActiveRecord фактически вернут ActiveRecord:: отношение, запрос которого еще не был оценен (ленивая загрузка) и может иметь метод order, вызванный на нем, чтобы разгрузить эту обработку в базу данных, где она будет масштабироваться намного лучше, чем перечисли стратегия на основе.

использование Enumerable для сортировки также путает выполнение разбиения на страницы в базе данных. Ничто не мешает навести порядок стратегия применяется в виде. Тем не менее, я бы хотел поставить это в рамки модели.

sorted = @records.order(:created_at)

просто вызовите сортировку по коллекции, передавая в блок кода, который говорит Ruby, как вы хотите его сортировать:

collection.sort { |a,b| a.created_at <=> b.created_at }

пожалуйста, посмотрите на это, а также проверить свои сложности.

Model.all.sort_by{|m| m.created_at} #=> O(log n)

#versus

Model.order(“created_at DESC”) #=> O(1)

лучший способ сортировки массива ActiveRecord-это использование метода по умолчанию order

пользователи@.order (: created_at)

Это самое быстрое и самое правильное решение, потому что в этом случае он возвращает сортированный массив из БД, и вам не нужно использовать какую-либо другую операцию для этого в классе, например, если вы будете использовать suggested sort_by Он будет циклически бросать каждый элемент массива, и после этого он не будет массивом ActiveRecord, а не крутым в моем мнение.

order можно использовать строки и sumbols, это очень полезно, и это принимает несколько параметров

пользователи@.приказ('created_at возрастанию, имя по убыванию, фамилия и ASC')