Měli byste používat zástupný symbol získat správný formát a zajistit, aby byl správně citován:
t = Time.new
events = Event.where("datetime < :t", :t => t)
timestamp
nelze porovnávat sloupec s celým číslem v PostgreSQL, ale můžete v SQLite. Musíte porovnat své timestamp
s jiným timestamp
(nebo date
) nebo řetězec, který lze analyzovat jako timestamp
. Tento SQL nebude fungovat:
SELECT "events".* FROM "events" WHERE (datetime < 132462148)
ale tyto budou:
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23 06:52:25.096869')
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23')
Zde je několik lekcí:
- Měli byste také začít vyvíjet nad PostgreSQL, pokud se chystáte nasadit do Heroku, ActiveRecord vás neizoluje od všech rozdílů mezi různými databázemi.
- Měli byste nechat ActiveRecord, aby se co nejvíce staral o problémy s převodem typů. Pokud porovnáváte s datem nebo časem, použijte zástupný symbol a předejte AR nějaký časový objekt a nechte AR, aby se o to starala.
- Pokud je to možné, použijte místo interpolace řetězců zástupné symboly.