11

ここに私の協会があります:

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

Favorites 関連付けの created_at 列でユーザーのお気に入りの投稿を並べ替えたいと考えています。ただし、これはお気に入りの created_at 属性ではなく、投稿の created_at 属性でソートされます。お気に入りの created_at 属性で並べ替えるにはどうすればよいですか?

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

2 に答える 2

24

order by 句で使用するテーブルを指定する必要があります。

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

するべきです。

関連付けを検査するときに Rails コンソールを使用するのが 1 つの便利な方法です。具体的には、実行中の Active Record クエリで「to_sql」メソッドを使用すると役立ちます。

例えば:

% bundle exec rails console

> u = User.last
> u.favorited.order('created_at DESC').to_sql
于 2012-05-14T17:46:35.613 に答える