Vous devez utiliser un espace réservé pour obtenir le bon format et s'assurer qu'il est correctement cité :
t = Time.new
events = Event.where("datetime < :t", :t => t)
Vous ne pouvez pas comparer un timestamp
colonne avec un entier dans PostgreSQL mais vous pouvez dans SQLite. Vous devez comparer votre timestamp
avec un autre timestamp
(ou date
) ou une chaîne qui peut être analysée comme un timestamp
. Ce SQL ne fonctionnera pas :
SELECT "events".* FROM "events" WHERE (datetime < 132462148)
mais ceux-ci :
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23 06:52:25.096869')
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23')
Il y a plusieurs leçons ici :
- Vous devriez également commencer à développer sur PostgreSQL si vous allez déployer sur Heroku, ActiveRecord ne vous isolera pas de toutes les différences entre les différentes bases de données.
- Vous devriez laisser ActiveRecord s'occuper autant que possible des problèmes de conversion de type, si vous comparez avec une date ou une heure, utilisez un espace réservé et donnez à AR un objet temporel quelconque et laissez AR s'en occuper.
- Dans la mesure du possible, utilisez des espaces réservés au lieu de l'interpolation de chaîne.