9

我在 Product 和 ProductCategory 之间有一对多的关系。

如何查询至少有一种产品关联的所有产品类别?

class Product < ActiveRecord::Base
  belongs_to  :product_category
end

class ProductCategory < ActiveRecord::Base
  has_many :products
end
4

4 回答 4

5
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

于 2012-09-27T18:51:20.040 回答
4

ProductCategory.includes(:products).where('products.id is not null').all

于 2012-09-27T15:28:14.410 回答
3

Joins 进行内部连接,因此其他一些答案中的 where 子句是多余的。当类别有多个产品时,按 products.id 分组将重复该类别,按 ProductCategory 分组将消除重复。

ProductCategory.joins(:products).group('product_categories.id')
于 2015-03-26T20:45:11.860 回答
0

一个更具可读性的解决方案:

ProductCategory.joins(:products).where('product_categories.id is not null').group('products.id')
于 2014-06-26T09:18:16.157 回答