将created_at字段与Rails上的PGSQL进行比较

时间:2011-12-06 22:13:36

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

我的问题有点像在这里找到的问题:

How to compare sqlite TIMESTAMP values

除了答案对PostgreSQL不起作用。有没有办法比较Rails用PG函数创建的两个created_at值?

这就是我想要做的事情(我知道这不起作用,DATETIME对PG不起作用):

EventDish.find_by_sql(["select * from ............. and DATETIME(events.created_at) < ?", other_event.created_at])

添加省略号以突出显示重要部分。换句话说,我想比较两个Rails created_at字段(这些是使用默认值),但我想将它们与PG进行比较。有什么建议? (我对SQL一般不太熟悉,所以任何纯Rails解决方案也会受到赞赏)

提前致谢

2 个答案:

答案 0 :(得分:1)

你应该能够做到:

EventDish.where('created_at < ?', other_event.created_at)

这转换为:

"SELECT \"event_dishes\".* FROM \"event_dishes\" WHERE (created_at < '2011-06-10 16:39:19.557436')"

除非你真的需要做一些复杂的查询,否则我会亲自使用find_by_sql。如果可以,请保持简单,让ActiveRecord为您完成工作。

如果您无法避免使用find_by_sql,那么只需将当前查询更新为:

EventDish.find_by_sql(["select * from ............. WHERE (created_at < '#{other_event.created_at}')")

答案 1 :(得分:0)

只需跳过DATETIME()函数:

EventDish.find_by_sql(['select * from event_dish where created_at > ?', other_event.created_at])