Powinieneś używać symbolu zastępczego aby uzyskać odpowiedni format i upewnić się, że jest prawidłowo cytowany:
t = Time.new
events = Event.where("datetime < :t", :t => t)
Nie możesz porównać timestamp
kolumna z liczbą całkowitą w PostgreSQL, ale możesz w SQLite. Musisz porównać swój timestamp
z innym timestamp
(lub date
) lub ciąg, który można przeanalizować jako timestamp
. Ten kod SQL nie działa:
SELECT "events".* FROM "events" WHERE (datetime < 132462148)
ale te będą:
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23 06:52:25.096869')
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23')
Jest tu kilka lekcji:
- Powinieneś również zacząć programować na PostgreSQL, jeśli zamierzasz wdrażać w Heroku, ActiveRecord nie izoluje Cię od wszystkich różnic między różnymi bazami danych.
- Powinieneś pozwolić ActiveRecord zająć się problemami z konwersją typów tak bardzo, jak to możliwe, jeśli porównujesz z datą lub czasem, użyj symbolu zastępczego i przekaż AR jakiś obiekt czasu i pozwól AR się tym martwić.
- W miarę możliwości używaj symboli zastępczych zamiast interpolacji ciągów.