Đối với Rails 4, bạn sẽ làm:
class Article < ActiveRecord::Base
has_many :comments, -> { order(created_at: :desc) }
end
class Comment < ActiveRecord::Base
belongs_to :article
end
Đối với một has_many :through
mối quan hệ, thứ tự đối số quan trọng (nó phải là thứ hai):
class Article
has_many :comments, -> { order('postables.sort' :desc) },
:through => :postable
end
Nếu bạn luôn muốn bình luận truy cập theo thứ tự không quan trọng bối cảnh mà bạn cũng có thể làm được điều này thông qua default_scope
trong Comment
như:
class Comment < ActiveRecord::Base
belongs_to :article
default_scope { order(created_at: :desc) }
end
Tuy nhiên, điều này có thể có vấn đề vì những lý do được thảo luận trong câu hỏi này .
Trước Rails 4, bạn có thể chỉ định order
làm khóa cho mối quan hệ, như:
class Article < ActiveRecord::Base
has_many :comments, :order => 'created_at DESC'
end
Như Jim đã đề cập, bạn cũng có thể sử dụng sort_by
sau khi bạn đã tìm nạp kết quả mặc dù trong bất kỳ tập hợp kích thước kết quả nào, điều này sẽ chậm hơn đáng kể (và sử dụng nhiều bộ nhớ hơn) so với việc đặt hàng của bạn thông qua SQL / ActiveRecord.
Nếu bạn đang làm điều gì đó mà việc thêm đơn hàng mặc định là cồng kềnh vì lý do nào đó hoặc bạn muốn ghi đè thứ tự mặc định của mình trong một số trường hợp nhất định, thì việc chỉ định nó trong chính hành động tìm nạp là rất nhỏ:
sorted = article.comments.order('created_at').all