2010-11-17 45 views
39

Nasıl geçersiz kılınır: has_many'de tanımlanan sipariş

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

DESC

Authors.books.order('name DESC') 

ismine göre sıralı tüm kitapları sorgulamaya çalışıyorum ama sonuç

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

boyutunda ve sonuçlar aşağıdaki şekilde sıralanmıştır.

İlişkideki orijinal siparişi kaldırmak veya geçersiz kılmak için bir yol var mı? Ya da bir ilişkide bir siparişi kötü bir fikir mi belirliyor?

Rails 3.0.3 kullanarak

cevap

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

harika bu! Bununla birlikte, herhangi bir yerde belge bulunamadı; Nerede buldun? – Christopher

+2

Aslında bu geçerli mi? https://github.com/rails/rails/commit/e0b76d6151821527f16b3f163abde3ebea1b2a50 – Christopher

+3

@Christopher ~ Okumalarıma göre değil. @ Jon'un cevabının altını kabul etmenizi önerebilir miyim (muhtemelen bu gönderiden muhtemelen çıkmış olabilirsiniz)? – jcolebrand

32

.reorder() Yani bu kullanmak .except(:order).order()

lehine Raylar 3.0.3 yılında kaldırıldı:

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

# revolder ve '.except (: order) .order hakkında raylar 3.1.0.rc4 üzerinde herhangi bir kullanım dışı bırakma uyarısı görmüyorum) 'derneklerden alınan sipariş şartlarını çıkarmaz. –

+1

: .except (: order) .order() '** **, ilişkilendirmelerde tanımlanan sipariş maddelerini hariç tutar. – Anjan

+1

Rails 3.2.8'de kullanımdan kaldırılan 'yeniden sipariş' sözünü görmüyorum: http://apidock.com/rails/v3.2.8/ActiveRecord/QueryMethods/reorder – Matthias

-1
Author.first.books.reverse_order 
İlgili konular