我在Product和ProductCategory之间有一对多的关系。
如何查询至少有一个与之关联的产品的所有产品类别?
class Product < ActiveRecord::Base
belongs_to :product_category
end
class ProductCategory < ActiveRecord::Base
has_many :products
end
答案 0 :(得分: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
答案 1 :(得分:4)
ProductCategory.includes(:products).where('products.id is not null').all
答案 2 :(得分:3)
Joins创建一个内连接,所以其他一些答案中的where子句是多余的。按产品分类。如同其他人一样,当类别包含多个产品时,将重复该类别,按ProductCategory分组将消除重复。
ProductCategory.joins(:products).group('product_categories.id')
答案 3 :(得分:0)
稍微更易读的解决方案:
ProductCategory.joins(:products).where('product_categories.id is not null').group('products.id')