Ruby on rails 活动记录查询和heroku出现问题。

Ruby on rails 活动记录查询和heroku出现问题。,ruby-on-rails,postgresql,heroku,Ruby On Rails,Postgresql,Heroku,我只是尝试运行一个查询来查找数据库中datetime列中的值小于当前unix时间戳的所有记录 目前这是我的代码。它在当地运行良好 t = Time.new.to_i Event.where("datetime < #{t}") 当我在heroku控制台中测试时,我得到了这个错误 >> Event.where("datetime < #{t}") ActiveRecord::StatementInvalid: PGError: ERROR: operator does

我只是尝试运行一个查询来查找数据库中datetime列中的值小于当前unix时间戳的所有记录

目前这是我的代码。它在当地运行良好

t = Time.new.to_i
Event.where("datetime < #{t}")
当我在heroku控制台中测试时,我得到了这个错误

>> Event.where("datetime < #{t}")
ActiveRecord::StatementInvalid: PGError: ERROR:  operator does not exist: character varying < integer
LINE 1: SELECT "events".* FROM "events"  WHERE (datetime < 132462148...
                                                         ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT "events".* FROM "events"  WHERE (datetime < 1324621488)
    /app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.1/lib/active_record/connection_adapters/postgresql_adapter.rb:1003:in `async_exec'
    /app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.1/lib/active_record/connection_adapters/postgresql_adapter.rb:1003:in `exec_no_cache'
    /app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.1/lib/active_record/connection_adapters/postgresql_adapter.rb:591:in `block in exec_query'
    /app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.1/lib/active_record/connection_adapters/abstract_adapter.rb:244:in `block in log'
有什么想法吗?

您应该使用a来获得正确的格式,并确保正确引用:

t      = Time.new
events = Event.where("datetime < :t", :t => t)
但这些将:

SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23 06:52:25.096869')
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23')
这里有几个教训:

如果要部署到Heroku,还应该开始在PostgreSQL之上开发,ActiveRecord不会将您与各种数据库之间的所有差异隔离开来。 您应该让ActiveRecord尽可能地担心类型转换问题,如果您要与日期或时间进行比较,请使用占位符并将某种类型的时间对象交给AR,让AR担心。 尽可能使用占位符而不是字符串插值。 您应该使用a获得正确的格式,并确保正确引用:

t      = Time.new
events = Event.where("datetime < :t", :t => t)
但这些将:

SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23 06:52:25.096869')
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23')
这里有几个教训:

如果要部署到Heroku,还应该开始在PostgreSQL之上开发,ActiveRecord不会将您与各种数据库之间的所有差异隔离开来。 您应该让ActiveRecord尽可能地担心类型转换问题,如果您要与日期或时间进行比较,请使用占位符并将某种类型的时间对象交给AR,让AR担心。 尽可能使用占位符而不是字符串插值。
您是否在本地使用postgresql?您是否在本地使用postgresql?谢谢。这解决了我的问题!非常感谢。这解决了我的问题!