选择关系不为空的记录

时间:2012-09-27 15:25:59

标签: ruby-on-rails ruby-on-rails-3 activerecord

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

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

class Product < ActiveRecord::Base
  belongs_to  :product_category
end

class ProductCategory < ActiveRecord::Base
  has_many :products
end

4 个答案:

答案 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')