Encomendar uma colecção como DESC

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

este código mostra uma colecção ordenada como ASC, mas eu quero encomendar esta colecção como DESC.

Como posso conseguir isso?

Author: Damien MATHIEU, 2010-10-20

7 answers

Ainda melhor, você pode definir um escopo para classificar o seu evento e usá-lo em sua renderização.

No seu modelo de Evento:

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

Se utilizar o Rails3, na sua opinião pode simplesmente fazer:

<%= render @events.desc %>
 59
Author: Yannis, 2010-10-20 09:36:09

Como descrito em http://guides.rubyonrails.org/active_record_querying.html

@events.order(event_at: :desc)
 41
Author: Francisco DC, 2015-05-10 18:59:02

Nos carris 3 a sintaxe correcta é:

<%= render :partial => 'event', :collection => @events.order(:event_at).reverse_order %>
 10
Author: JosephL, 2014-10-08 22:55:35

Podes reverter a colecção ordenada:

<%= render :partial => 'event', :collection => @events.sort_by(&:event_at).reverse %>
Mas como o Yannis diz, é melhor separar as coisas da base de dados, idealmente.
 8
Author: Shadwell, 2010-10-20 10:47:18
Dependendo do tipo de objeto que você tem, você terá diferentes maneiras de fazer a função de ordenação.

Se o seu objecto é um ActiveRecord, pode fazê-lo da seguinte forma:

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

Isto irá adicionar uma cláusula ORDER à sua consulta SQL, ordenando os itens antes de os Obter da base de dados.

A segunda solução é mais lenta, já que está a ordenar as suas entradas em ruby.
Mas se você está manipulando uma série de objetos, é o seu único solucao.

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

Isto irá percorrer todos os eventos, verificando cada um deles para o maior com o método <=>.

Você também pode ver a documentação de ordenação sobre enumeráveis.

 6
Author: Damien MATHIEU, 2013-09-17 07:16:01

Você pode fazer isso usando o método desc com parâmetro.

Ver abaixo exemplo

@events.desc(:event_at)

Isto dar-lhe-á @events por ordem decrescente de event_at Campo.

Obrigado.
 1
Author: Amol Udage, 2016-01-20 07:55:08
Eu queria mostrar uma tabela de liga e uma ordem por pontos desc. Depois de experimentar vários métodos infrutíferos foi isso que funcionou para mim neste caso. Adicionei esta linha ao meu método de índice de controladores.
@teams = Team.all.order(points: :desc)
 1
Author: Peter Dawson, 2018-05-10 08:40:16