2010-11-17 15 views
39

tengoCómo anular: orden definido en una has_many

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

estoy tratando de consultar todos los libros ordenados por nombre DESC

Authors.books.order('name DESC') 

pero el resultado es

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

y los resultados regresan con el nombre ASC

¿hay alguna manera de eliminar el pedido original en la asociación o anularlo? ¿O es una mala idea especificar un orden en una relación?

utilizando rieles 3.0.3

Respuesta

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

Eso es genial! Sin embargo, no pude encontrarlo documentado en ningún lado; ¿Dónde lo encontraste? – Christopher

+2

En realidad, ¿esto todavía es válido? https://github.com/rails/rails/commit/e0b76d6151821527f16b3f163abde3ebea1b2a50 – Christopher

+3

@Christopher ~ No por mi lectura. ¿Puedo sugerir (que probablemente ya dedujiste de esa publicación) aceptando la respuesta de @ Jon a continuación? – jcolebrand

32

.reorder() está obsoleto en las rieles 3.0.3 a favor de .except(:order).order()

fin de utilizar esta:

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

No veo ninguna advertencia de depreciación en los rieles 3.1.0.rc4 sobre #reorder, y '.except (: orden) .order () 'no excluye las cláusulas de orden que se extraen de las asociaciones. –

+1

'.except (: order) .order()' ** does ** excluye cláusulas de orden definidas en asociaciones. – Anjan

+1

No veo ninguna mención de 'reorder' como obsoleto en Rails 3.2.8: http://apidock.com/rails/v3.2.8/ActiveRecord/QueryMethods/reorder – Matthias

-1
Author.first.books.reverse_order 
Cuestiones relacionadas