item_idとkeyという名前の列を持つRecordテーブルがあります。Item_idは、Itemという名前のテーブルを指す外部キーです。アクティブなモデル定義は次のようになります。
class Record < ActiveRecord::Base
belongs_to :item
end
class Item < ActiveRecord::Base
has_many :records
end
ここで、個別のキーを持つ各アイテムに属するレコードの数を数えたいと思います。結果は次のようになります。
{
#<Item id: 1, ...> => 19,
#<Item id: 2, ...> => 6,
#<Item id: 3, ...> => 21,
#<Item id: 4, ...> => 33,
}
ハッシュオブジェクトを数えることで、これを2行で行うことができます。
records = Record.select('DISTINCT item_id, key').includes(:item)
records.each_with_object(Hash.new 0) { |e, a| a[e.item] += 1 }
純粋なアクティブレコードクエリまたはSQLステートメントを使用してそれを作成することは可能かどうか疑問に思っています。