9

ProductとProductCategoryの間には1対多の関係があります。

少なくとも1つの製品が関連付けられているすべての製品カテゴリを照会するにはどうすればよいですか?

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"
)

このスクリーンキャストで素晴らしいライアンベイツのおかげでこれを解決する方法を見つけました: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 に答える