在rails中获得最多讨论的论坛

时间:2013-04-16 15:19:23

标签: ruby-on-rails database ruby-on-rails-3 orm

我有两个课程:ForumTopicForum has_many Topic s。

  1. 你如何得到(让我们假设)5个最讨厌的论坛?
  2. 你如何按日期限制?例如,大多数人都在讨论这一天/每周等。
  3. 感谢

3 个答案:

答案 0 :(得分: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 })

答案 1 :(得分: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)

答案 2 :(得分:1)

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

步骤:

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

  4. class Topic
     def after_save
       self.forum.touch
     end
    end
    

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