78 votes

Tableau de tri renvoyé par ActiveRecord par date (ou toute autre colonne)

Comment puis-je trier un tableau renvoyé par une requête ActiveRecord par une colonne date created_at ?

Cela se produit une fois la requête exécutée.

S'il vous plaît ne me dites pas de le faire dans la requête car j'ai besoin que cela se produise dans la vue.

Merci

143voto

Chuck Points 138930

Ruby inclut un support pour le tri de la boîte.

 sorted = @records.sort_by &:created_at
 

Cependant, cela ne semble pas avoir grand chose à voir avec l'affichage et appartient probablement au contrôleur.

40voto

shulmang Points 106

Alors que Ruby Énumérable est génial, ActiveRecord requêtes retournent, en réalité, un ActiveRecord::Relation dont la requête n'aura pas encore été évalué (Lazy Loading) et peut avoir de la méthode de l'ordre l'ont appelé à l'arrêt de ce traitement à la base de données où il sera échelle beaucoup mieux qu'une Énumération de stratégie.

À l'aide de Énumérable pour le tri aussi son désarroi faire de la pagination dans la base de données. Il n'y a rien pour empêcher l'ordre de la stratégie soit appliquée dans la vue. Cependant, j'aurais tendance à mettre cela dans la portée du modèle.

sorted = @records.order(:created_at)

26voto

Bill D Points 156

Appelez simplement sort sur la collection, en passant le bloc de code qui indique à Ruby comment vous voulez trier:

 collection.sort { |a,b| a.created_at <=> b.created_at }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X