<%= render :partial => 'event', :collection => @events.sort_by(&:event_at)%>
Этот код показывает коллекцию, упорядоченную как ASC, но я хочу заказать эту коллекцию как DESC.
Как я могу это достичь?
<%= render :partial => 'event', :collection => @events.sort_by(&:event_at)%>
Этот код показывает коллекцию, упорядоченную как ASC, но я хочу заказать эту коллекцию как DESC.
Как я могу это достичь?
Еще лучше, вы можете установить область для сортировки своего события и использовать его в рендере.
В вашей модели событий:
scope :desc, order("events.event_at DESC")
Если вы используете Rails3, в вашем представлении вы можете просто сделать:
<%= render @events.desc %>
Как описано в http://guides.rubyonrails.org/active_record_querying.html
@events.order(event_at: :desc)
В Rails 3 правильный синтаксис:
<%= render :partial => 'event', :collection => @events.order(:event_at).reverse_order %>
Вы можете просто изменить отсортированную коллекцию:
<%= render :partial => 'event', :collection => @events.sort_by(&:event_at).reverse %>
но, как говорит Яннис, вам лучше сортировать, поскольку вы идеально выбираете вещи из базы данных.
В зависимости от типа объекта у вас будут разные способы выполнения сортировки.
Если ваш объект является ActiveRecord, вы можете сделать это следующим образом:
@events.order('events.event_at DESC')
Это добавит предложение ORDER
в ваш SQL-запрос, сортируя записи до их извлечения из базы данных.
Второе решение выполняется медленнее, так как сортировка записей в рубине. Но если вы манипулируете массивом объектов, это ваше единственное решение.
@events.sort {|a,b| b.event_at <=> a.event_at }
Это будет охватывать все события, проверяя каждый из них на самый большой с помощью метода <=>
.
Вы также можете увидеть документацию сортировки в Enumerables.
Вы можете сделать это, используя метод desc
с параметром.
См. ниже пример
@events.desc(:event_at)
Это даст вам @events в порядке убывания поля event_at
.
Спасибо.