2010-11-17 2 views
39

Я имеюКак переопределить: порядок определен в has_many

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

Я пытаюсь запросить все книги, отсортированные по имени DESC

Authors.books.order('name DESC') 

но результат

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

, а результаты возвращаются с отсортированным по названию ASC

Есть ли способ удалить первоначальный заказ в ассоциации или переопределить его? Или задает порядок в отношении плохой идеи?

с использованием Rails 3.0.3

ответ

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

Это здорово! Не мог найти его документально нигде; где ты это нашел? – Christopher

+2

Собственно, это все еще актуально? https://github.com/rails/rails/commit/e0b76d6151821527f16b3f163abde3ebea1b2a50 – Christopher

+3

@ Кристофер ~ Не моим чтением. Могу ли я предложить (что вы, вероятно, уже вывели из этого сообщения), принимая ниже ответ Джона? – jcolebrand

32

.reorder() устарела в Rails 3.0.3 в пользу .except(:order).order()

Так используйте:

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

Я не вижу никаких предупреждений об отказе от rails 3.1.0.rc4 о #reorder и '.except (: order) .order () 'не исключает предложения порядка, которые вытягиваются из ассоциаций. –

+1

'.except (: order) .order()' ** does ** исключает предложения порядка, определенные в ассоциациях. – Anjan

+1

Я не вижу упоминания о том, что 'reorder' устарел в Rails 3.2.8: http://apidock.com/rails/v3.2.8/ActiveRecord/QueryMethods/reorder – Matthias