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

我想按收藏夹关联的 created_at 列对用户最喜欢的帖子进行排序。但是,这是按 Post created_at 属性排序的,而不是 Favorites 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 控制台。具体来说,它有助于在您正在执行的 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 回答
8

在您的帖子模型中使用它来设置默认顺序:

default_scope { order("created_at DESC") }
于 2015-03-21T06:25:56.940 回答