0

Rails 4.0.0 に単純なモデルがあります。

class Template < ActiveRecord::Base
    has_many :instances
end

class Instance < ActiveRecord::Base
    # attribute: completion_result
end

と でグループ化されcountたインスタンスの を取得したい。私のクエリは次のようになります。Templatecompletion_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)のキーがインスタンスになるためHashActiveRecordn + 1 クエリ シナリオを取り除くのに役立ちます。

この場合、複数のキーでグループ化しているため、 mygroupgroup(:template, :completion_result)Rails に変更すると、無効なクエリが生成されます (存在しないtemplateの代わりに選択しようとします)。template_id

これは Rails のバグですか、それとも何か不足していますか?

4

1 に答える 1