【发布时间】:2012-02-11 20:03:33
【问题描述】:
我正在创建一个 rails 3 应用程序。
它有群组(比如有成员的社交群组等等,成员可以在群组上发帖)。 所以我的模型是Group and Post,group has_many posts(每个(posts)显然都有group_id)。
我正在尝试弄清楚如何获取按最新帖子排序的群组列表,包括没有任何帖子的群组。
谢谢!
【问题讨论】:
标签: sql ruby-on-rails sorting
我正在创建一个 rails 3 应用程序。
它有群组(比如有成员的社交群组等等,成员可以在群组上发帖)。 所以我的模型是Group and Post,group has_many posts(每个(posts)显然都有group_id)。
我正在尝试弄清楚如何获取按最新帖子排序的群组列表,包括没有任何帖子的群组。
谢谢!
【问题讨论】:
标签: sql ruby-on-rails sorting
根据您拥有的列,它可能类似于
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
【讨论】:
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) } 第二行是必要的,因为另一个 find 破坏了之前的顺序
Group.joins('LEFT OUTER JOIN posts ON groups.id = posts.group_id').order('posts.created_at desc').group('groups.id')
【讨论】:
对于任何想在 rails 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) }
第二行是必要的,因为另一个 find 破坏了之前的顺序
【讨论】: