Сортировка массива, возвращаемого ActiveRecord по дате (или любому другому столбцу)
Как я могу отсортировать массив, возвращаемый запросом ActiveRecord с помощью created_at столбец с датой?
это происходит после выполнения запроса.
пожалуйста, не говорите мне сделать это в запросе, потому что мне нужно, чтобы это произошло в представлении.
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')
Comments