如何让Postgres中的MIN与Rails玩得很好?

时间:2014-10-28 15:35:06

标签: ruby-on-rails ruby ruby-on-rails-3 postgresql

现在,我有一个巨大的查询,我在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对象,那就容易多了。

1 个答案:

答案 0 :(得分:0)

Rails很可能将字段拉为字符串,因为您没有查询具有已定义列类型的模型,我认为您最好的选择是将查询更改为输出到表,然后使用Rails模型查询该表。