created at mysql类型,mysql – 无法选择created_at分组的行

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-31 06:01   344   0

我有桌子:

+----+----------------------+---------------------+

| 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 |

+----+----------------------+---------------------+

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

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)

=> #<:relation id: nil>]>

如您所见,两个示例中的最终查询相同.

为何在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.select(...).map(&:date)

您应该将日期(created_at)视为日期值.如果为sum(implements_features)添加别名,则可以使用该别名作为方法名称来提取总和.

标签:ruby-on-rails,activerecord,mysql,rails-activerecord

来源: https://codeday.me/bug/20190926/1820658.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP