【问题标题】:get most discussed forums in rails在 Rails 中获得讨论最多的论坛
【发布时间】:2013-04-16 15:19:23
【问题描述】:

我有两个课程:ForumTopicForum has_many Topics。

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    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 })
    

    【讨论】:

      【解决方案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)
      

      【讨论】:

      • 这实际上比我的方法好,它只触发一个查询。
      【解决方案3】:

      最好的方法是在两个表中都保留时间戳(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)

      【讨论】:

      • 这不是给你讨论最多的论坛,而是最近讨论的论坛。
      猜你喜欢
      • 2021-08-10
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 2021-03-24
      • 2011-04-15
      • 1970-01-01
      • 2019-11-02
      • 1970-01-01
      相关资源
      最近更新 更多