2010-11-17 21 views
39

JeComment passer outre: l'ordre défini dans un has_many

class Authors 
has_many :books, :order => 'name ASC' 

Je suis en train d'interroger tous les livres triés par nom DESC

Authors.books.order('name DESC') 

mais le résultat est

SELECT * FROM .... ORDER BY name ASC, name DESC 

et les résultats reviennent avec le nom trié ASC

est-il un moyen de supprimer l'ordre d'origine dans l'association ou de le remplacer? Ou est-ce que spécifier une commande dans une relation est une mauvaise idée?

utilisant Rails 3.0.3

Répondre

82
Authors.books.reorder('name DESC') 
+0

Ce qui est génial! Impossible de le trouver documenté cependant; où l'as tu trouvé? – Christopher

+2

En fait, est-ce encore valide? https://github.com/rails/rails/commit/e0b76d6151821527f16b3f163abde3ebea1b2a50 – Christopher

+3

@Christopher ~ Pas par ma lecture. Puis-je suggérer (que vous avez probablement déjà déduit de ce post) d'accepter la réponse de Jon @ ci-dessous? – jcolebrand

32

.reorder() a été dépréciés dans Rails 3.0.3 en faveur de .except(:order).order()

utilisez ceci:

Authors.books.except(:order).order('name DESC') 
+1

Je ne vois aucun avertissement de dépréciation sur les rails 3.1.0.rc4 sur #reorder, et '.except (: order) .order () 'n'exclut pas les clauses d'ordre tirées des associations. –

+1

'.except (: order) .order()' ** fait ** exclut les clauses d'ordre définies sur les associations. – Anjan

+1

Je ne vois aucune mention de «réorganiser» étant obsolète dans Rails 3.2.8: http://apidock.com/rails/v3.2.8/ActiveRecord/QueryMethods/reorder – Matthias

-1
Author.first.books.reverse_order