Работает локально с SQLite, но на Heroku: PGError: ERROR: синтаксическая ошибка в или около "NULL" - PullRequest
1 голос
/ 06 февраля 2011

Мой код прекрасно работает для sqllite локально, но когда я нажимаю на heroku, я получаю:

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 ])

Кстати, есть ли способ структурировать этот запрос, используя чисто активную запись, поэтому мы можем (надеюсь) избежать специфичных для базы данных строк запроса?

1 Ответ

2 голосов
/ 06 февраля 2011

Вы уверены, что используете SQLLite на Heroku, а не MySQL? В любом случае синтаксис запроса кажется немного неправильным. Я бы изменил ваш запрос к этому:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...