2011-10-27 3 views
1

ActiveRecord에서 .where를 사용하여 .map 스타일 질의

모든 항목의 회사 수를 보려면 다음과 같이 작성할 수 있습니다.

@counts = Item.all.collect{|i| i.companies.count} 

.where과 유사한 작업을 수행하여 count > 0을 가진 항목 만 반환 할 수 있습니까?

위의 경우에 대한 구체적인 답이 필요 없습니다. - 현재 사용하고있는 것보다 훨씬 더 유연하게 쿼리 할 수있는 일반적인 솔루션을 찾고 있습니다!

답변

2

그것을 할 수있는 가장 효과적인 방법은 예를 들어, 서브 쿼리를하고, 다른 방법이 있습니다

class Item 
    # items must have a column named companies_count 
    has_many :companies, :counter_cache => true 
    scope :with_companies, where('companies_count>0') 
end 

항목에 카운터 캐시 열을 추가하거나 & 그룹에 & 수를 가입하는 것입니다.

중요한 것은 where에 쓰는 모든 것이 데이터베이스에서 실행되므로 SQL이 할 수있는 것만 가능하다는 것입니다.