A partir de Rails 4, harías:
class Article < ActiveRecord::Base
has_many :comments, -> { order(created_at: :desc) }
end
class Comment < ActiveRecord::Base
belongs_to :article
end
Para una has_many :through
relación, el orden de los argumentos es importante (debe ser el segundo):
class Article
has_many :comments, -> { order('postables.sort' :desc) },
:through => :postable
end
Si siempre va a querer a los comentarios de acceso en el mismo orden sin importar el contexto también se puede hacer esto a través de default_scope
dentro Comment
como:
class Comment < ActiveRecord::Base
belongs_to :article
default_scope { order(created_at: :desc) }
end
Sin embargo, esto puede ser problemático por las razones discutidas en esta pregunta .
Antes de Rails 4, podía especificar order
como clave en la relación, como:
class Article < ActiveRecord::Base
has_many :comments, :order => 'created_at DESC'
end
Como mencionó Jim, también puede usar sort_by
después de haber obtenido los resultados, aunque en cualquier conjunto de resultados de tamaño, esto será significativamente más lento (y usará mucha más memoria) que hacer su pedido a través de SQL / ActiveRecord.
Si está haciendo algo en el que agregar un orden predeterminado es engorroso por algún motivo o si desea anular el predeterminado en ciertos casos, es trivial especificarlo en la acción de búsqueda en sí:
sorted = article.comments.order('created_at').all