我在 Product 和 ProductCategory 之间有一对多的关系。
如何查询至少有一种产品关联的所有产品类别?
class Product < ActiveRecord::Base
belongs_to :product_category
end
class ProductCategory < ActiveRecord::Base
has_many :products
end
我在 Product 和 ProductCategory 之间有一对多的关系。
如何查询至少有一种产品关联的所有产品类别?
class Product < ActiveRecord::Base
belongs_to :product_category
end
class ProductCategory < ActiveRecord::Base
has_many :products
end
ProductCategory.all(
:joins => :products,
:select => "product_categories.*, count(products.id) as prod_count",
:group => "product_categories.id"
)
感谢伟大的 Ryan Bates 在这个截屏视频中发现了如何解决这个问题:http ://railscasts.com/episodes/181-include-vs-joins
ProductCategory.includes(:products).where('products.id is not null').all
Joins 进行内部连接,因此其他一些答案中的 where 子句是多余的。当类别有多个产品时,按 products.id 分组将重复该类别,按 ProductCategory 分组将消除重复。
ProductCategory.joins(:products).group('product_categories.id')
一个更具可读性的解决方案:
ProductCategory.joins(:products).where('product_categories.id is not null').group('products.id')