Je zou een placeholder moeten gebruiken om het juiste formaat te krijgen en ervoor te zorgen dat het correct wordt geciteerd:
t = Time.new
events = Event.where("datetime < :t", :t => t)
Je kunt een timestamp
niet vergelijken kolom met een geheel getal in PostgreSQL, maar dat kan in SQLite. Je moet je timestamp
. vergelijken met een ander timestamp
(of date
) of een tekenreeks die kan worden geparseerd als een timestamp
. Deze SQL werkt niet:
SELECT "events".* FROM "events" WHERE (datetime < 132462148)
maar deze zullen:
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23 06:52:25.096869')
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23')
Er zijn hier verschillende lessen:
- Je moet ook beginnen met ontwikkelen bovenop PostgreSQL als je naar Heroku gaat implementeren, ActiveRecord zal je niet isoleren van alle verschillen tussen verschillende databases.
- Je moet ActiveRecord zich zoveel mogelijk zorgen maken over de typeconversieproblemen, als je vergelijkt met een datum of een tijd, gebruik dan een tijdelijke aanduiding en geef AR een soort tijdobject en laat AR zich er zorgen over maken.
- /li>
- Gebruik waar mogelijk tijdelijke aanduidingen in plaats van interpolatie van tekenreeksen.