Rails 4.0.0 に単純なモデルがあります。
class Template < ActiveRecord::Base
has_many :instances
end
class Instance < ActiveRecord::Base
# attribute: completion_result
end
と でグループ化されcount
たインスタンスの を取得したい。私のクエリは次のようになります。Template
completion_result
Instance.joins(:template)
.where('templates.enabled = ?', true)
.group(:template_id, :completion_result)
.count
これはうまく機能し、次のような結果が得られます。
{[7, "ok"]=>2, [10, "ok"]=>1, [8, nil]=>2,
[8, "cancel"]=>2, [9, "ok"]=>1, [8, "ok"]=>5}
単一の属性でグループ化する他のクエリでは、代わりに指定でき、group(:template)
代わりにgroup(:template_id)
のキーがインスタンスになるためHash
、ActiveRecord
n + 1 クエリ シナリオを取り除くのに役立ちます。
この場合、複数のキーでグループ化しているため、 mygroup
をgroup(:template, :completion_result)
Rails に変更すると、無効なクエリが生成されます (存在しないtemplate
の代わりに選択しようとします)。template_id
これは Rails のバグですか、それとも何か不足していますか?