Выпуск с активной записью запросов и героку. - PullRequest
1 голос
/ 23 декабря 2011

Я просто пытаюсь выполнить запрос, чтобы найти все записи в базе данных, которые имеют значение в столбце «datetime», которое меньше текущей метки времени Unix.

В настоящее время это мой код.Локально работает.

t = Time.new.to_i
Event.where("datetime < #{t}")

Когда я проверяю это в консоли heroku, я получаю эту ошибку.

1 Ответ

5 голосов
/ 23 декабря 2011

Вы должны использовать заполнитель , чтобы получить правильный формат и убедиться, что он правильно указан в кавычках:

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

Невозможно сравнить столбец timestamp с целым числомв PostgreSQL, но вы можете в SQLite.Вы должны сравнить ваш 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, если вы собираетесь развертывать на Heroku, ActiveRecord не изолирует вас от всех различий между различными базами данных.
  2. Вы должны позволить ActiveRecord как можно больше беспокоиться о проблемах преобразования типов, еслиВы сравниваете данные с датой или временем, используйте заполнитель и передаете AR какой-либо объект времени, и пусть AR беспокоится об этом.
  3. По возможности используйте заполнители вместо интерполяции строк.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...