2011-07-27 13 views
19

我想抓住所有可購買的類別productsRuby/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') 

但這不是很乾。有沒有辦法在我的:with_purchaseable_products範圍內將我的:purchaseable範圍應用於products

謝謝。

回答

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

+0

兩個額外的引用:https://gorails.com/blog/activerecord-merge和http://apidock.com/鐵軌/ ActiveRecord的/ SpawnMethods /合併 – Miguelgraz

相關問題