2011-07-27 10 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') 

しかし、あまり乾燥していません。私の:purchaseableスコープを私の:with_purchaseable_productsスコープのproductsに適用する方法はありますか?

ありがとうございました。

答えて

36
+0

2つの余分な参照にもっと読む

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/merge – Miguelgraz

関連する問題