无法选择created_at分组的行

我有桌子:

+----+----------------------+---------------------+ | id | implemented_features | created_at | +----+----------------------+---------------------+ | 1 | 19 | 2013-07-18 04:10:12 | | 2 | 6 | 2013-07-18 04:10:12 | | 3 | 26 | 2013-07-19 04:10:12 | | 4 | 11 | 2013-07-19 04:10:12 | | 5 | 1 | 2013-07-20 04:10:12 | +----+----------------------+---------------------+ 

当我通过My​​SQL直接查询它时,它可以完美地工作

 select date(created_at) as date, sum(implemented_features) as sum from summaries group by date(created_at); 

但是当我尝试将此查询转换为ActiveRecord语法时,它返回nil。

 2.0.0p0 :035 > Summary.select("date(created_at) as date, sum(implemented_features)").group("date(created_at)") Summary Load (0.5ms) SELECT date(created_at) as date, sum(implemented_features) FROM `summaries` GROUP BY date(created_at) => #<ActiveRecord::Relation [#]> 

如您所见,两个示例中的最终查询相同。 为何在ActiveRecord的情况下不起作用?

在我的rails项目中使用Rails 4.0.0,Ruby 2.0,mysql db。

我觉得你对控制台输出感到有点困惑。

你是这样说的:

 Summary.select("date(created_at) as date, sum(implemented_features)")... 

所以返回的Summary实例(包含在ActiveRecord::Relation )没有任何常用的Summary属性:no id ,no created_at ,no implemented_featured等。当你在ActiveRecord对象上调用inspect时,它想要显示你在对象里面是什么,这意味着它想要显示包含的数据库属性; 您的Summary实例没有任何常用属性,因此您可以看到

不要害怕,你选择的价值确实存在。 如果你说:

 Summary.select(...).map(&:date) 

您应该将date(created_at) as date值。 如果为sum(implemented_features)添加别名,则可以使用该别名作为方法名称来提取总和。