2011-02-06 3 views
1

내 코드는 로컬 sqllite에 잘 실행,하지만 난에게 Heroku에 밀어 때 얻을 :실행합니다 로컬 SQLite는을 가진, 그러나 Heroku가에 : PGError 오류 : 구문 오류에서 또는 근처 "NULL"

ActiveRecord::StatementInvalid (PGError: ERROR: syntax error at or near "NULL" 
LINE 1: ...LECT "beeps".* FROM "beeps" WHERE ((widget_id NOT NULL) AND ... 
                  ^
: SELECT "beeps".* FROM "beeps" WHERE ((widget_id NOT NULL) AND (updated_at > '2011-02-06 02:27:59.867809') AND (userphone = '0000000xxxx') AND (beeper 
= '0000000zzzz') AND (inbound = 't')) ORDER BY beeps.id DESC LIMIT 1): 

루비 코드는 다음과 같습니다

그런데
Beep.last(:conditions => [ "(widget_id NOT NULL) AND (updated_at > ?) AND (userphone = ?) AND (beeper = ?) AND (inbound = ?)", 5.minutes.ago, aphone, beeper, inboundflag ]) 

, 순수 액티브 레코드를 사용하여이 쿼리를 구성 할 수있는 방법이있다, 그래서 우리는 (희망) 데이타베이스 고유의 쿼리 문자열을 피할 수있다?

답변

2

MySQL이 아닌 Heroku에서 SQLLite를 사용하고 있습니까? 어느 쪽이든 쿼리 구문은 약간 잘못된 것처럼 보입니다. 나는이에 쿼리를 수정합니다 :

 
Beep.last(:conditions => [ "(widget_id IS NOT NULL) AND (updated_at > ?) AND (userphone = ?) AND (beeper = ?) AND (inbound = ?)", 5.minutes.ago, aphone, beeper, inboundflag ]) 

당신이 함께 체인 당신의 조건을 같은 수 Rails3 사용하는 경우

 
Beep.where('widget_id IS NOT NULL) 
    .where('updated_at > ?', 5.minutes.ago) 
    .where(userphone: aphone) 
    .where(beeper: beeper) 
    .where(inbound: inboundflag) 
    .last 
+0

가 감사를! "xxx NOT NULL"sqllite 잘 작동하지만 "IS"있어야합니다. "xxx IS NOT NULL" – jpwynn

관련 문제