现在,我有一个巨大的查询,我在Rails中运行:
@foo_collection = Foo.select('
foos.id,
array_agg() AS some_aggregate, -- about 20 of these, but they're not the problem
MIN(bars.some_date), -- Returning wrong type - this is the problem
').joins('
INNER JOIN bars... -- A LOT of joins - but also not the problem
').where('
some_conditions
').group('
foos.id
')
此查询根据PGAdmin提取我想要的数据。什么不做是很好地转化为Rails。尝试将@foo_collection.some_date
作为DateTime
对象进行处理以创建时差会产生以下结果:
undefined method `-' for "2014-04-01 16:12:35.461712":String
有没有办法哄我的PG输出给Rails DateTime
而不是String
,或者我必须告诉Rails将所有some_date
解析为{{1} }} S'
到目前为止,我已经通过让Rails转换所有String
s @foo_collection.some_date
,然后转换to_datetime
来解决这个问题,这样我就可以找到它们之间的时间间隔。但这有很大的开销 - 如果我可以直接从数据库中撤回to_f
对象,那就容易多了。
答案 0 :(得分:0)
Rails很可能将字段拉为字符串,因为您没有查询具有已定义列类型的模型,我认为您最好的选择是将查询更改为输出到表,然后使用Rails模型查询该表。