Область видимости Rails прекрасно работает с SQLite и MySQL, но не с Heroku (PostgreSQL) - PullRequest
1 голос
/ 28 ноября 2011
scope :unapproved, lambda {|event| where("event_id = ? AND status IS NOT ?",
event.id, "approved")}

Область действия :unapproved работает с SQLite и MySQL, но не работает в Heroku, где она использует PostgreSQL. Я не могу понять, как заставить его работать с PostgreSQL.

Ответы [ 2 ]

6 голосов
/ 28 ноября 2011

PostgreSQL не использует IS или IS NOT для общих сравнений, вы хотите, чтобы <> или !=:

where("event_id = ? AND status <> ?", event.id, "approved")

<> также работал в MySQL и SQLite, кромеесли вы хотите сравнить с NULL, тогда вы должны использовать IS NULL или IS NOT NULL везде.

IS используется для специальных сравнений, таких как IS NULL и IS DISTINCT FROM, см. Операторы сравнения раздел руководства PostgreSQL для получения более подробной информации.

Если вы планируете развертывание на Heroku, вам действительно следует разрабатывать поверх PostgreSQL (8,3 для общей базы данных, 9,0 дляпосвященный).PostgreSQL немного строже, чем SQLite (и MySQL), и никакая ORM не может полностью оградить вас от различий между базами данных.Поведение GROUP BY является еще одной распространенной проблемой при переходе с SQLite / MySQL на PostgreSQL, поэтому вы можете просмотреть все группы;также проверьте, как вы справляетесь со строками, которые слишком длинны для ваших столбцов varchar, AFAIK SQLite игнорирует ваши ограничения по размеру, но PostgreSQL будет громко жаловаться, если вы попытаетесь превысить размер столбца (а MySQL будет обрезать ваши данные с помощью простого предупреждения, если тольковы перевели свой сервер в строгий режим).

0 голосов
/ 29 ноября 2011
scope :unapproved, lambda { |event| 
  where("event_id = ?", event.id).
  where("status != ?",  "approved")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...