Pregunta Ordene una colección como DESC


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

Este código muestra una colección ordenada como ASC, pero quiero ordenar esta colección como DESC.

¿Cómo puedo conseguir esto?


36
2017-10-20 09:14


origen


Respuestas:


Aún mejor, puede establecer un alcance para ordenar su evento y usarlo en su procesamiento.

En tu modelo de evento:

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

Si usa Rails3, en su opinión, simplemente puede hacer:

<%= render @events.desc %>

58
2017-10-20 09:36



Como se describe en http://guides.rubyonrails.org/active_record_querying.html

@events.order(event_at: :desc)

39
2018-05-10 18:59



En Rails 3 la sintaxis correcta es:

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

10
2017-07-09 01:45



Usted puede simplemente invertir la colección ordenada:

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

pero como dice Yannis, es mejor que selecciones las cosas de la base de datos de manera ideal.


8
2017-10-20 10:47



Dependiendo del tipo de objeto que tenga, tendrá diferentes formas de hacer la función de clasificación.

Si su objeto es un ActiveRecord, puede hacerlo de la siguiente manera:

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

Esto agregará un ORDER cláusula de su consulta SQL, ordenando las entradas antes de recuperarlas de la base de datos.

La segunda solución es más lenta, ya que estás clasificando tus entradas en ruby.
Pero si manipulas una variedad de objetos, es tu única solución.

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

Esto recorrerá todos los eventos, comprobando que cada uno de ellos es el más grande con el <=> método.

También puedes ver la documentación de clasificación en los Enumerables.


6
2017-10-20 09:18



Puedes hacer esto usando desc método con parámetro.

Ver ejemplo abajo

@events.desc(:event_at)

Esto te dará @eventos en orden descendente de event_at campo.

Gracias.


1
2018-01-20 07:55



Quería mostrar una tabla de ligas y ordenar por puntos desc. Después de probar varios métodos sin éxito, esto es lo que funcionó para mí en este caso. Agregué esta línea al método de índice de mi controlador.

@teams = Team.all.order(points: :desc)

0
2018-05-10 08:25