如何使ActiveRecord获取查询值而不是模型?

时间:2017-06-14 20:30:34

标签: ruby-on-rails-4 activerecord

我有一个按预期工作的查询,但结果是作为模型数组返回,而不是值。查询转换日期,然后按该日期分组。

ActiveRecord查询语句:

Participant.
  select(
         "count(*)",
         "date_trunc('month', participants.completed_at) as Date").
  group('Date')

返回:

[ #<Participant id: nil>,
  #<Participant id: nil>,
  #<Participant id: nil>,
  #<Participant id: nil> ]

有趣的是,相关数据存在于参与者身上......例如,如果我查看模型,它会向我显示我需要的信息:

pry(main)> results.first.attributes
=> {"count"=>70, "date"=>2014-04-01 00:00:00 UTC, "id"=>nil}

但它有点奇怪,因为countdate都不是该模型的属性。

原始SQL查询:

SELECT
  count(*),
  date_trunc('month', participants.completed_at) as Date
FROM "participants"
WHERE "participants"."deleted_at" IS NULL
GROUP BY Date;

返回:

 count |        date
-------+---------------------
  5742 | [NULL]
   590 | 2016-05-01 00:00:00
   798 | 2016-06-01 00:00:00
   293 | 2017-01-01 00:00:00

我知道我可以简单地将结果映射到我想要的格式,但是我想直接从ActiveRecord语句中获取数据作为数组或散列,而不是模型对象。

0 个答案:

没有答案