2

我有两个课程:ForumTopicForumhas_many Topics。

  1. 您如何获得(假设)5 个讨论最多的论坛?
  2. 你如何按日期限制它?例如,今天/本周讨论最多的等等。

谢谢

4

3 回答 3

2

1. 您如何获得(假设)5 个讨论最多的论坛?

您可能可以执行以下操作:

Forum.where('id IN (?)', Topic.limit(5).count(:group => 'forum_id').map {|key, value| key })

2. 你如何按日期限制它?例如,今天/本周讨论最多的等等。

Forum.where('id IN (?)', Topic.where('date > ', 1.week.ago.to_s(:db)).limit(5).count(:group => 'forum_id').map {|key, value| key })
于 2013-04-16T15:36:35.500 回答
2

如果讨论最多的论坛是主题最多的论坛,则查询将是:

Forum.joins(:topics).group("forums.id").order("COUNT(*) DESC").limit(5)

上周开题最多的五个论坛:

Forum.joins(:topics)
     .where("topics.created_at > ?", 1.week.ago)
     .group("forums.id")
     .order("COUNT(*) DESC")
     .limit(5)
于 2013-04-16T15:56:58.870 回答
1

最好的方法是在两个表中保留时间戳(created_at 和 updated_at)。并在主题发生某些活动时更新它们。

脚步:

  1. 保留timestamps在两个表中。
  2. 在模型中添加after_save回调Topic,以更新updated_at父论坛。
  3. 获取论坛列表order by updated_at desc

class Topic
 def after_save
   self.forum.touch
 end
end

然后运行一个查询 Forum.order("updated_at desc").limit(5)

于 2013-04-16T15:36:21.230 回答