我在 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)
这将使 keyHash
成为一个ActiveRecord
实例,从而帮助我摆脱 n + 1 查询场景。
在这种情况下,由于我按多个键进行分组,如果我将我的更改group
为group(:template, :completion_result)
Rails 将生成一个无效的查询(它会尝试选择template
而不是template_id
不存在的 )。
这是Rails的错误还是我错过了什么?