A partir de los carriles 4, puede hacer:
class Article < ActiveRecord::Base
has_many :comments, -> { order(created_at: :desc) }
end
class Comment < ActiveRecord::Base
belongs_to :article
end
Para que una relación has_many :through
las cuestiones de orden argumento (que tiene que ser segundo):
class Article
has_many :comments, -> { order('postables.sort' :desc) },
:through => :postable
end
Si siempre querrán acceso comentarios en el mismo orden, sin importar el contexto, también puede hacerlo a través de default_scope
dentro de Comment
como:
class Comment < ActiveRecord::Base
belongs_to :article
default_scope { order(created_at: :desc) }
end
Sin embargo, esto puede ser problemático para el reasons discussed in this question.
Antes de Rieles 4 se podría especificar order
como una clave en la relación, como:
class Article < ActiveRecord::Base
has_many :comments, :order => 'created_at DESC'
end
Como Jim menciona también se puede utilizar sort_by
después de que haya resultados inverosímiles aunque en cualquier conjunto de resultados de tamaño esto será significativamente más lento (y usa mucha más memoria) que hacer tu pedido a través de SQL/ActiveRecord.
Si usted está haciendo algo donde la adición de un orden predeterminado es engorroso por alguna razón o si desea anular su defecto, en ciertos casos, es trivial para especificar que en la propia acción de ir a buscar:
sorted = article.comments.order('created_at').all
tener cuidado, que está utilizando un método inesperado: @ article.comments (recarga = false) es forzar una falta de caché (forzar la recarga de un re lation). Si proporciona un hash, es lo mismo que @ article.comments (true). No te olvides de usar .all (: order => '...'). Me rompí la pierna algunas veces. –