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)这将使 keyHash成为一个ActiveRecord实例,从而帮助我摆脱 n + 1 查询场景。

在这种情况下,由于我按多个键进行分组,如果我将我的更改groupgroup(:template, :completion_result)Rails 将生成一个无效的查询(它会尝试选择template而不是template_id不存在的 )。

这是Rails的错误还是我错过了什么?

4

1 回答 1

0

你有没有尝试过这样的事情

Template.all.select('templates.*, COUNT(1) as count').select(:completion_result).joins(:instances).where(enable: true).group(:id).group(:completion_result).map{|x| {[x,x.completion_result] => x.count }}
于 2013-11-06T17:57:20.207 回答