我正在创建一个rails 3应用程序。
它有团体(像社交团体与成员等等,成员可以在团体上发帖)。 所以我的模型是Group和Post,以及group has_many帖子(每个帖子(帖子)显然都有group_id)。
我想知道如何获取按最新帖子排序的群组列表,包括没有任何帖子的群组。
谢谢!
答案 0 :(得分:1)
根据您拥有的列,它可能类似于
select g.group_id, g.group_name, max( p.post_date )
from group g left join post p on g.group_id = p.group_id
group by g.group_id, g.group_name
order by max( p.post_date ) desc
答案 1 :(得分:0)
Group.joins('LEFT OUTER JOIN posts ON groups.id = posts.group_id').order('posts.created_at desc').group('groups.id')
答案 2 :(得分:0)
对于任何想要在轨道3中寻找最终解决方案的人来说,它看起来像这样:
sorted_groups_ids = Group.joins("LEFT JOIN posts p ON groups.id = p.group_id").select("groups.id").group("groups.id").order("MAX(p.id) DESC").map(&:id) sorted_groups = Group.find(sorted_groups_ids).sort_by { |g| sorted_groups_ids.index(g.id) }
第二行是必要的,因为另一行找到打破以前的订单