Rails 3 嵌套查询避免使用 SQL



假设我有以下模型:

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 查询指南混合了几种样式,并没有详细介绍其中任何一种样式。

样式的混合是因为使用哈希的样式当前无法描述所有可能的 SQL 查询。因此,始终存在使用字符串的回退。

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

但是,可以在没有字符串的情况下编写它。

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

查询将如下所示:

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

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

相关内容

  • 没有找到相关文章

最新更新