Du bör använda en platshållare för att få rätt format och se till att det är korrekt citerat:
t = Time.new
events = Event.where("datetime < :t", :t => t)
Du kan inte jämföra en timestamp
kolumn med ett heltal i PostgreSQL men du kan i SQLite. Du måste jämföra din timestamp
med en annan timestamp
(eller date
) eller en sträng som kan tolkas som en timestamp
. Denna SQL kommer inte att fungera:
SELECT "events".* FROM "events" WHERE (datetime < 132462148)
men dessa kommer:
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23 06:52:25.096869')
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23')
Det finns flera lektioner här:
- Du bör också börja utveckla ovanpå PostgreSQL om du ska distribuera till Heroku, ActiveRecord kommer inte att isolera dig från alla skillnader mellan olika databaser.
- Du bör låta ActiveRecord oroa sig för typkonverteringsproblemen så mycket som möjligt, om du jämför med ett datum eller en tid, använd en platshållare och ge AR ett tidsobjekt av något slag och låt AR oroa dig för det.
- Använd platshållare istället för stränginterpolation när det är möjligt.