Dovresti utilizzare un segnaposto per ottenere il formato corretto e assicurarsi che sia quotato correttamente:
t = Time.new
events = Event.where("datetime < :t", :t => t)
Non puoi confrontare un timestamp
colonna con un numero intero in PostgreSQL ma puoi farlo in SQLite. Devi confrontare il tuo timestamp
con un altro timestamp
(o date
) o una stringa che può essere analizzata come timestamp
. Questo SQL non funzionerà:
SELECT "events".* FROM "events" WHERE (datetime < 132462148)
ma questi:
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23 06:52:25.096869')
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23')
Ci sono diverse lezioni qui:
- Dovresti anche iniziare a sviluppare su PostgreSQL se intendi eseguire il deployment su Heroku, ActiveRecord non ti isolerà da tutte le differenze tra i vari database.
- Dovresti lasciare che ActiveRecord si preoccupi il più possibile dei problemi di conversione del tipo, se stai confrontando una data o un'ora, usa un segnaposto e consegna ad AR un oggetto tempo di qualche tipo e lascia che AR se ne occupi.
- Utilizza i segnaposto invece dell'interpolazione di stringhe ove possibile.