2011-12-23 3 views
1

나는 현재 유닉스 타임 스탬프보다 작은 "datetime"칼럼의 값을 가진 데이터베이스의 모든 레코드를 찾기 위해 쿼리를 실행하려고하고있다.활성 레코드 쿼리 및 heroku 문제가 있습니다.

현재 이것은 내 코드입니다. 그것은 로컬에서 잘 실행됩니다.

나는 이것을 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' 

아이디어가 있으십니까? 당신은 placeholder를 사용한다

+0

로컬로 postgresql을 사용하고 있습니까? – thatmiddleway

답변

5

올바른 형식을 얻을 제대로 인용되어 있는지 확인합니다 : 당신은 PostgreSQL의 정수와 timestamp 열을 비교할 수 없습니다하지만 당신은 SQLite는에서와 수

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

. timestamp과 다른 timestamp (또는 date)을 비교하거나 timestamp으로 구문 분석 할 수있는 문자열을 비교해야합니다. 이 SQL은 작동하지 않습니다

SELECT "events".* FROM "events" WHERE (datetime < 132462148) 

그러나 이들은 것이다 :

SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23 06:52:25.096869') 
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23') 

몇 가지 교훈이 여기에 있습니다 :

  1. 당신은 또한 당신이 있다면 PostgreSQL의 상단에 개발을 시작한다 ActiveRecord는 Heroku에 배포하려고 할 때 다양한 데이터베이스 간의 모든 차이점으로부터 당신을 보호하지 않습니다.
  2. ActiveRecord가 가능한 한 많이 유형 변환 문제를 걱정해야합니다. 날짜 또는 시간과 비교할 때 자리 표시자를 사용하고 AR에 일종의 시간 객체를 지정하고 AR이 그것에 대해 걱정할 수 있도록해야합니다.
  3. 가능하면 문자열 보간 대신 자리 표시자를 사용하십시오.
+0

감사합니다. 이 문제가 해결되었습니다. – Jon

관련 문제