Ruby on rails 为什么ActiveRecord不接收这些获取聚合函数
直接在带有Postgres的ActiveRecord上使用聚合函数进行查询似乎可以正常工作Ruby on rails 为什么ActiveRecord不接收这些获取聚合函数,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,直接在带有Postgres的ActiveRecord上使用聚合函数进行查询似乎可以正常工作 ActiveRecord::Base.connection.execute(" SELECT created_at::date as date, sum(item1_count) as sum_item1, sum(item2_count) as sum_item2, sum(item3) as sum_item3 from items GROUP by c
ActiveRecord::Base.connection.execute("
SELECT created_at::date as date,
sum(item1_count) as sum_item1,
sum(item2_count) as sum_item2,
sum(item3) as sum_item3 from items
GROUP by
created_at::date ORDER BY date desc").to_a
返回类似这样的值,这是可以的
[
{
"date" => "2014-01-23",
"sum_item1" => "3239",
"sum_item2" => "90",
"sum_item3" => "0.00000"
},
{
"date" => "2014-01-22",
"sum_item1" => "1981",
"sum_item2" => "19",
"sum_item3" => "0.00000"
}
]
例如,问题是当尝试使用作用域执行相同操作时
class Item < ActiveRecord::Base
scope :myscope, -> {
select("created_at::date as date, sum(item1_count) as sum_item1,
sum(item2_count) as sum_item2,
sum(item3) as sum_item3")
.group("created_at::date")
.order("date desc") }
end
如何将聚合函数传递给作用域?我可能有点不对劲,但我记得必须将聚合字段名用引号括起来,例如selectsumitem1\u count as'sum\u item1'尝试过,但似乎没有什么不同。您是否尝试过对对象调用聚合方法来检查它是否存在?像Item.first.sum_item2一样,我只是做了一个快速测试,即使对象检查器没有打印出聚合字段,它们仍然存在,并且调用它们的方法返回正确的值。
[
#<Item:0x00000103cc3d38> {
:id => nil,
:date => Thu, 23 Jan 2014
},
#<Item:0x00000103cc39a0> {
:id => nil,
:date => Wed, 22 Jan 2014
}
]