标签:ruby-on-rails activerecord mysql rails-activerecord
我有桌子:
+----+----------------------+---------------------+
| 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)
=> #<ActiveRecord::Relation [#<Summary 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时,它想要显示你在对象里面是什么,这意味着它想要显示包含的数据库属性;您的摘要实例没有任何常用属性,因此您可以看到<摘要ID:nil>等内容.
不要害怕,你选择的价值确实存在.如果你说:
Summary.select(...).map(&:date)
您应该将日期(created_at)视为日期值.如果为sum(implements_features)添加别名,则可以使用该别名作为方法名称来提取总和.
标签:ruby-on-rails,activerecord,mysql,rails-activerecord 来源: https://codeday.me/bug/20190926/1820658.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。