我有两个课程:Forum
和Topic
。 Forum
has_many Topic
s。
感谢
答案 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)。并在主题发生某些活动时更新它们。
步骤:
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)