Pada Rails 4, Anda akan melakukan:
class Article < ActiveRecord::Base
has_many :comments, -> { order(created_at: :desc) }
end
class Comment < ActiveRecord::Base
belongs_to :article
end
Untuk suatu has_many :through
hubungan, urutan argumen penting (harus menjadi yang kedua):
class Article
has_many :comments, -> { order('postables.sort' :desc) },
:through => :postable
end
Jika Anda selalu ingin mengakses komentar dalam urutan yang sama apa pun konteksnya, Anda juga dapat melakukannya melalui default_scope
dalam Comment
seperti:
class Comment < ActiveRecord::Base
belongs_to :article
default_scope { order(created_at: :desc) }
end
Namun ini bisa menjadi masalah karena alasan yang dibahas dalam pertanyaan ini .
Sebelum Rails 4 Anda dapat menentukan order
sebagai kunci pada hubungan tersebut, seperti:
class Article < ActiveRecord::Base
has_many :comments, :order => 'created_at DESC'
end
Seperti yang disebutkan Jim, Anda juga dapat menggunakan sort_by
setelah Anda mengambil hasil meskipun dalam kumpulan hasil apa pun ukurannya akan jauh lebih lambat (dan menggunakan lebih banyak memori) daripada melakukan pengurutan melalui SQL / ActiveRecord.
Jika Anda melakukan sesuatu di mana menambahkan urutan default merepotkan karena suatu alasan atau Anda ingin menimpa default Anda dalam kasus tertentu, sangatlah mudah untuk menentukannya dalam tindakan pengambilan itu sendiri:
sorted = article.comments.order('created_at').all