为什么ActiveRecord没有收到这些获取聚合函数

时间:2014-07-04 02:19:30

标签: 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 
    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

这里的结果是不同的。运行user.items.myscope.to_a时,我得到以下结果,错过了聚合值并添加了一个不应存在的id字段。

[
  #<Item:0x00000103cc3d38> {
      :id => nil,
    :date => Thu, 23 Jan 2014
  },
  #<Item:0x00000103cc39a0> {
      :id => nil,
    :date => Wed, 22 Jan 2014
  }
]

如何将聚合函数传递给范围?

0 个答案:

没有答案