2010-04-08 5 views
3

간단한 작업 : 기사에 많은 의견이있는 경우 긴 기사 목록에 각 기사의 의견 개수를 표시 할 수 있어야합니다. Arel을 사용하여이 데이터를 미리로드하는 방법을 알아 내려고합니다.Arel (Rails 3)을 통한 열렬한 연관 관계 계산

README 파일의 "복잡한 집계"섹션은 이러한 유형의 문제에 대해 설명하는 것 같지만 예제 코드를 제공하지는 않으며 조인 된 쿼리 하나 대신 두 가지 쿼리로 수행하는 방법도 제공하지 않습니다. 이는 성능면에서 더 나쁩니다.

는 주어진 다음의 :

나는 각각 얼마나 많은 코멘트를 설정 한 기사를 미리로드 할 수있는 방법
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

4

카운터 캐시를 사용할 수 없습니까?

belongs_to :article, :counter_cache => true 

은 또한 나를 러시에 있었고, 그것을 캐싱 :) 감사를 잊어 열 comments_count

+0

나는 최근에 하나의 테이블 상속으로 counter_cache를 사용하여 프로덕션에서 문제를 겪었고 스스로 롤업해야했습니다. – nurettin