2012-05-14 8 views
6

Éstos son mis asociaciones:¿Cómo ordenar por create_at columna de asociación en rieles?

Class Post 
belongs_to :user 
has_many :favorites, :dependent => :destroy 
has_many :favoriters, :through => :favorites, :source => :user 
end 

Class User 
has_many :posts 
has_many :favorites, :dependent => :destroy 
has_many :favorited, :through => :favorites, :source => :post 
end 

Class Favorites 
belongs_to :user, :post 
end 

quiero para ordenar los mensajes favoritos de los usuarios por la columna de created_at de la asociación favoritos. Sin embargo, esto se ordena mediante el atributo Post created_at, no el atributo Favorites created_at. ¿Cómo puedo ordenar por el atributo Favorites created_at?

@[email protected]('created_at DESC') 
+0

¿Se puede reformular su pregunta? – beck03076

Respuesta

15

Debe especificar qué tabla desea utilizar en la cláusula order by.

@posts = @user.favorited.order('posts.created_at DESC') 

debería hacerlo.

Un buen truco es utilizar la consola de rieles cuando se inspeccionan las asociaciones. Específicamente, ayuda utilizar el método 'to_sql' en las consultas de Active Record que está realizando.

Por ejemplo:

% bundle exec rails console 

> u = User.last 
> u.favorited.order('created_at DESC').to_sql 
+0

Genial, eso funciona. En mi caso, sin embargo, es @posts = @ user.favorited.order ('favorites.created_at DESC') para que se clasifiquen por el atributo favorite_at de favoritos. Gracias por la sugerencia. –

+0

no parece funcionar del todo bien, hizo una edición con más información –

3

utilizar esto en su modelo post para el sistema orden predeterminado:

default_scope { order("created_at DESC") } 
Cuestiones relacionadas