Подтвердить что ты не робот

Заказать коллекцию как DESC

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

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

Как я могу это достичь?

4b9b3361

Ответ 1

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

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

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

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

<%= render @events.desc %>

Ответ 3

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

<%= render :partial => 'event', :collection => @events.order(:event_at).reverse_order %>

Ответ 4

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

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

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

Ответ 5

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

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

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

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

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

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

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

Вы также можете увидеть документацию сортировки в Enumerables.

Ответ 6

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

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

@events.desc(:event_at)

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

Спасибо.