Rails 4'ten itibaren şunları yapacaksınız:
class Article < ActiveRecord::Base
has_many :comments, -> { order(created_at: :desc) }
end
class Comment < ActiveRecord::Base
belongs_to :article
end
Bir has_many :through
ilişki için argüman sırası önemlidir (ikinci olmalıdır):
class Article
has_many :comments, -> { order('postables.sort' :desc) },
:through => :postable
end
Hep hayır bağlamını önemli aynı sırada erişim yorumlarla isteyeceksiniz Eğer siz de aracılığıyla bu yapabileceğini default_scope
içinde Comment
gibi:
class Comment < ActiveRecord::Base
belongs_to :article
default_scope { order(created_at: :desc) }
end
Ancak , bu soruda tartışılan nedenlerden dolayı bu sorunlu olabilir .
Rails 4'ten önce order
, ilişkide bir anahtar olarak belirtebilirsiniz , örneğin:
class Article < ActiveRecord::Base
has_many :comments, :order => 'created_at DESC'
end
Jim'in bahsettiği gibi, sort_by
sonuçları getirdikten sonra da kullanabilirsiniz , ancak herhangi bir sonuç kümesinde bu, SQL / ActiveRecord aracılığıyla sipariş vermekten önemli ölçüde daha yavaş olacaktır (ve çok daha fazla bellek kullanacaktır).
Varsayılan sipariş eklemenin herhangi bir nedenle zahmetli olduğu bir şey yapıyorsanız veya belirli durumlarda varsayılanınızı geçersiz kılmak istiyorsanız, bunu getirme eyleminin kendisinde belirtmek önemsizdir:
sorted = article.comments.order('created_at').all