Заказать коллекцию как DESC - PullRequest
43 голосов
/ 20 октября 2010
<%= render :partial => 'event', :collection => @events.sort_by(&:event_at)%>

Этот код показывает коллекцию, заказанную как ASC, но я хочу заказать эту коллекцию как DESC.

Как мне этого добиться?

Ответы [ 7 ]

63 голосов
/ 20 октября 2010

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

В вашей модели событий:

scope :desc, order("events.event_at DESC")

Если вы используете Rails3, по вашему мнениюВы можете просто сделать:

<%= render @events.desc %>
48 голосов
/ 10 мая 2015

Как описано на http://guides.rubyonrails.org/active_record_querying.html

@events.order(event_at: :desc)
11 голосов
/ 09 июля 2013

В Rails 3 правильный синтаксис:

<%= render :partial => 'event', :collection => @events.order(:event_at).reverse_order %>
8 голосов
/ 20 октября 2010

Вы можете просто перевернуть отсортированную коллекцию:

<%= render :partial => 'event', :collection => @events.sort_by(&:event_at).reverse %>

, но, как сказал Яннис, вам лучше сортировать, так как вы в идеале выбираете вещи из базы данных.

6 голосов
/ 20 октября 2010

В зависимости от типа объекта, который у вас есть, у вас будут разные способы выполнения функции сортировки.

Если ваш объект является ActiveRecord, вы можете сделать это следующим образом:

@events.order('events.event_at DESC')

Это добавит предложение ORDER к вашему запросу SQL, сортируя записи перед тем, как вы извлекаете их из базы данных.

Второе решение медленнее, так как вы сортируете свои записи в ruby.
Но если вы манипулируете массивом объектов, это ваше единственное решение.

@events.sort {|a,b| b.event_at <=> a.event_at }

Это перебирает все события, проверяя каждое из них на наличие наибольшего с помощью метода <=>.

Вы также можете увидеть документацию по сортировке на перечислимых элементах.

2 голосов
/ 10 мая 2018

Я хотел отобразить таблицу лиг и порядок по точкам desc.После того, как я попробовал несколько неудачных методов, это то, что сработало для меня в данном случае.Я добавил эту строку в метод индекса моего контроллера.

@teams = Team.all.order(points: :desc)
1 голос
/ 20 января 2016

Вы можете сделать это, используя метод desc с параметром.

См. Пример ниже

@events.desc(:event_at)

Это даст вам @events в порядке убывания поля event_at.

Спасибо.

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