【问题标题】:Rails 3 Nested Query avoid SQLRails 3嵌套查询避免SQL
【发布时间】:2012-05-15 17:47:29
【问题描述】:

假设我有以下模型:

class Foo < ActiveRecord::Base
    belongs_to :bar
end

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

我想找到所有的Foos,包括Bara_idb_id分组。

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

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

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

子问题

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord arel


    【解决方案1】:

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

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

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

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

    查询类似于:

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

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

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 2016-10-02
      • 2018-09-27
      相关资源
      最近更新 更多