像SUM(foo)这样的Postgres聚合返回一个字符串,即使foo是一个整数。
如何将和转换为整数,以便得到的关系数组包含整数而不是字符串?
我尝试使用:: integer
来强制转换它Widget.select(" SUM(points)as totalpoints :: integer,agent,company")
但是postgres会抛出错误PG::Error: ERROR: syntax error at or near "::"
似乎应该有一些方法来告诉rails - 没有迭代遍历每个返回的数组元素 - INT的SUM是INT吗?
答案 0 :(得分:1)
这可能只是ActiveRecord适配器。不过,我对此并不完全确定。但是我认为当你选择级别的API时,它只会返回字符串,因为它实际上是从数据库读取的内容。当您使用更高级别的API时,我认为它知道如何将其转换回Ruby类型,因为它了解您的架构。
我无法在上面复制您的查询,但我做了以下事情:
Widget.connection.select_rows("SELECT sum(id) FROM widgets")
这返回:
[
[0] [
[0] "887"
]
]
如果我使用更高级别的API:
2.0.0-p353 :034 > Widget.sum('id')
D, [2014-06-24T15:34:52.644852 #95176] DEBUG -- : (0.5ms) SELECT SUM("widgets."."id") AS sum_id FROM "widgets"
887
此时它在我的控制台中给了我一个Integer类型。所以我怀疑Postgres没有错,但是当你使用ActiveRecord select API时,你可能需要自己转换为原生类型。