2010-04-08 96 views
3

簡單的任務:鑑於文章有很多評論,能夠在一長串文章中顯示每篇文章有多少評論。我正在努力解決如何使用Arel預加載這些數據。與Arel(Rails 3)的急切加載關聯計數

README文件的「Complex Aggregations」部分似乎討論了這種情況,但它並不完全提供示例代碼,也沒有提供在兩個查詢中執行此操作的方法,而不是一個連接的查詢,這對性能來說更糟糕。

考慮以下幾點:

class Article 
    has_many :comments 
end 

class Comment 
    belongs_to :article 
end 

我如何可以預載的一篇文章設置多少意見各有?

回答

2

可以使用SQL喜歡做一些討厭:

default_scope :select => 'articles.*, (select count(comments.id) from comments where comments.article_id = articles.id) as count_comments' 

,然後你將有機會獲得Article.first.count_comments。

另一個(更好的)方法是使用belongs_to關聯中的'counter_cache'特性/選項。

+0

傻我在匆忙,忘了有關緩存吧:)謝謝! – Matchu 2010-04-11 21:28:58

4

你不能使用計數器緩存嗎?

belongs_to :article, :counter_cache => true 

您還需要有一個遷移,增加了列comments_count

+0

我最近在生產中遇到了使用counter_cache單表繼承的問題,不得不自己推出 – nurettin 2012-12-10 12:08:56