2011-07-27 2 views
19

구매 가능한 products을 포함한 모든 카테고리를 수집하고 싶습니다.Ruby/Rails - WHERE 절의 일부로 조인 된 테이블의 범위 또는 클래스 메서드를 사용할 수 있습니까?

class Product < ActiveRecord::Base 
    belongs_to :category 
    scope :purchaseable, where(:available => true) 
end 

class Category < ActiveRecord::Base 
    has_many :products 
    scope :with_purchaseable_products, ????? 
end 

따라서 :with_purchaseable_products을 정의하려고합니다. 작동 방식 :

scope :with_purchaseable_products, joins(:products).where("products.available is true").group(:id).having('count(products.id) > 0') 

하지만 그다지 DRY가 아닙니다. 내 :purchaseable 범위를 내 :with_purchaseable_products 범위에 products 범위에 적용 할 수있는 방법이 있습니까?

감사합니다.

답변

36
+0

두 추가 참조에 대한 자세한 읽기

class Category < ActiveRecord::Base has_many :products scope :with_purchaseable_products, joins(:products).merge(Product.purchaseable).group(:id).having('count(products.id) > 0') end 

을 사용해야합니다 https://gorails.com/blog/activerecord-merge 및 http://apidock.com/ 레일/ActiveRecord/SpawnMethods/병합 – Miguelgraz