1

假设我有以下模型:

class Foo < ActiveRecord::Base
    belongs_to :bar
end

class Bar < ActiveRecord::Base
    belongs_to :a
    belongs_to :b
end

我想找到所有的Foos,包括和Bar分组。a_idb_id

我很确定以下查询会起作用:

Foo.joins(:bar).group('bar.a_id, bar.b_id').all

我想知道是否有一种方法可以不用在 group 语句中编写 SQL 吗?

子问题

这种查询风格叫什么,我在哪里可以阅读它的完整文档?rails 查询指南混合了多种样式,并且没有详细介绍其中的任何一种。

4

1 回答 1

1

样式的混合是因为使用散列的样式目前无法描述所有可能的 SQL 查询。因此,总是有使用字符串的后备。

您提供的查询有效,没有理由不使用它,因为字符串是非常标准的 SQL,如果使用不同的数据库也不应该失败。

但是,可以不使用字符串来编写它。

请注意,您当前编写的查询将引发错误,因为默认情况下会选择 Foo 的所有字段 - 但是对于组,您只能选择聚合函数或按列分组。

查询将类似于:

Foo.select("COUNT(*) as count").joins(:bar).group([:bar => :a_id, :bar => :b_id])

我刚刚添加了 select 子句,因此只选择了一个聚合函数。

于 2012-08-14T07:52:27.157 回答