我想获取包含可购买的products
的所有类别。
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
范围应用到products
范围内的:with_purchaseable_products
?
感谢。
答案 0 :(得分:36)
您应该使用合并方法
class Category < ActiveRecord::Base
has_many :products
scope :with_purchaseable_products, joins(:products).merge(Product.purchaseable).group(:id).having('count(products.id) > 0')
end
详细了解http://asciicasts.com/episodes/215-advanced-queries-in-rails-3