假设我有以下模型:
class Foo < ActiveRecord::Base
belongs_to :bar
end
class Bar < ActiveRecord::Base
belongs_to :a
belongs_to :b
end
我想找到所有Foos
,包括Bar
和按a_id
和b_id
分组。
我很确定以下查询会起作用:
Foo.joins(:bar).group('bar.a_id, bar.b_id').all
我想知道是否有一种方法可以在不编写 group 语句中的 SQL 的情况下做到这一点?
子问题
这种查询样式叫什么,在哪里可以阅读它的完整文档?rails 查询指南混合了几种样式,并没有详细介绍其中任何一种样式。
样式的混合是因为使用哈希的样式当前无法描述所有可能的 SQL 查询。因此,始终存在使用字符串的回退。
您提供的查询有效,没有理由不应该使用它,因为该字符串是非常标准的 SQL,如果使用不同的数据库,则不应失败。
但是,可以在没有字符串的情况下编写它。
请注意,您当前编写的查询将引发错误,因为默认情况下选择了Foo的所有字段 - 但是对于组,您只能选择聚合函数或按列分组。
查询将如下所示:
Foo.select("COUNT(*) as count").joins(:bar).group([:bar => :a_id, :bar => :b_id])
我刚刚添加了 select 子句,以便只选择一个聚合函数。