Given
class Category < ActiveRecord::Base
has_many :products, :order => 'name ASC'
end
Using the Rails 3 stack, how can I query for all categories that 'have' products?
In ARel (NOT ActiveRecord) we will do the following:
p = Arel::Table.new :products # Base Rel-var
c = Arel::Table.new :categories # Base Rel-var
predicate = p[:category_id].eq( c[:id] ) # for equality predicate
p.join(c) # Natural join
.on( predicate ) # Equi-Join
.group( p[:category_id] ) # Grouping expression to get distinct categories
.project( c[:id] ) # Project the distinct category IDs of the derived set.