ProductとProductCategoryの間には1対多の関係があります。
少なくとも1つの製品が関連付けられているすべての製品カテゴリを照会するにはどうすればよいですか?
class Product < ActiveRecord::Base
belongs_to :product_category
end
class ProductCategory < ActiveRecord::Base
has_many :products
end
ProductとProductCategoryの間には1対多の関係があります。
少なくとも1つの製品が関連付けられているすべての製品カテゴリを照会するにはどうすればよいですか?
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"
)
このスクリーンキャストで素晴らしいライアンベイツのおかげでこれを解決する方法を見つけました: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')