2012-05-15 274 views
1

假设我有以下型号: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 

我不知道是否有这样做,而不在组语句编写SQL的方式?

子问题

什么叫此查询的风格,我在哪里可以看到它的完整的文件? rails查询指南有几种样式的组合,并没有详细介绍其中的任何一种。

回答

1

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

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

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

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

查询会是这样的:

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

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