रेल 4 के रूप में, आप क्या करेंगे:
class Article < ActiveRecord::Base
has_many :comments, -> { order(created_at: :desc) }
end
class Comment < ActiveRecord::Base
belongs_to :article
end
एक has_many :throughसंबंध के लिए तर्क आदेश मायने रखता है (यह दूसरा होना चाहिए):
class Article
has_many :comments, -> { order('postables.sort' :desc) },
:through => :postable
end
आप हमेशा एक ही क्रम में पहुँच टिप्पणी करना चाहते हैं, तो कोई संदर्भ बात आप भी के माध्यम से ऐसा कर सकता है default_scopeके भीतर Commentकी तरह:
class Comment < ActiveRecord::Base
belongs_to :article
default_scope { order(created_at: :desc) }
end
हालाँकि यह इस प्रश्न में चर्चा किए गए कारणों के लिए समस्याग्रस्त हो सकता है ।
रेल 4 से पहले आप orderरिश्ते की कुंजी के रूप में निर्दिष्ट कर सकते हैं , जैसे:
class Article < ActiveRecord::Base
has_many :comments, :order => 'created_at DESC'
end
जैसा कि जिम ने उल्लेख किया है कि आप भी उपयोग कर सकते हैं sort_by परिणाम प्राप्त बाद हालांकि आकार के किसी भी परिणाम सेट में यह SQL / ActiveRecord के माध्यम से आपके ऑर्डर करने की तुलना में काफी धीमा (और बहुत अधिक मेमोरी का उपयोग करेगा)।
यदि आप कुछ ऐसा कर रहे हैं, जिसमें डिफ़ॉल्ट ऑर्डर जोड़ना किसी कारण से बोझिल है या आप कुछ मामलों में अपने डिफ़ॉल्ट को ओवरराइड करना चाहते हैं, तो इसे लाने की क्रिया में ही निर्दिष्ट करना तुच्छ है:
sorted = article.comments.order('created_at').all