【发布时间】:2013-04-16 15:19:23
【问题描述】:
我有两个课程:Forum 和 Topic。 Forum has_many Topics。
- 您如何获得(假设)5 个讨论最多的论坛?
- 如何按日期限制它?例如,这一天/一周讨论最多的等等。
谢谢
【问题讨论】:
标签: ruby-on-rails database ruby-on-rails-3 orm
我有两个课程:Forum 和 Topic。 Forum has_many Topics。
谢谢
【问题讨论】:
标签: ruby-on-rails database ruby-on-rails-3 orm
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 })
【讨论】:
如果讨论最多的论坛是主题最多的论坛,则查询将是:
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)
【讨论】:
最好的方法是在两个表中都保留时间戳(created_at 和 updated_at)。并在主题发生某些活动时更新它们。
步骤:
timestamps。 after_save 回调
在Topic 模型中,更新父论坛的updated_at。 order by updated_at desc。class Topic
def after_save
self.forum.touch
end
end
然后运行如下查询
Forum.order("updated_at desc").limit(5)
【讨论】: