2013-04-16 39 views

回答

2

1.查詢你如何獲得的(假設可以)5個最disscused論壇?

你可能能夠做這樣的事情:

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

2.如何通過日期限制呢?例如,大多數disscused這天/周等

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

最好的辦法是最disscused保持兩個表中的時間戳(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)

+0

這並不能給你討論最多的論壇,而是最近討論過的論壇。 –

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) 
+0

很好,謝謝你的隊友! –

+0

這實際上比我的方式更好,它只會觸發一個查詢。 –