让我说我有一个用户模型
class User < ActiveRecord::Base
has_many :posts
has_many :comments
...
end
并且Post
和Comment
都有一个created_at
列。
如何根据使用ActiveRecord组合的created_at
和posts
的最新comments
列对用户进行排序?
我知道我可以使用Ruby的sort
方法,但这太慢了。
答案 0 :(得分:2)
假设您使用PostgreSQL:
# Users with most recently created posts/comments go first
User.left_outer_joins(:posts, :comments)
.group('users.id')
.order('GREATEST(MAX(posts.created_at), MAX(comments.created_at)) DESC')
# .. and go last
User.left_outer_joins(:posts, :comments)
.group('users.id')
.order('GREATEST(MAX(posts.created_at), MAX(comments.created_at)) ASC')
对于MySQL,代码似乎相同。