Anda harus menggunakan placeholder untuk mendapatkan format yang tepat dan memastikan bahwa itu dikutip dengan benar:
t = Time.new
events = Event.where("datetime < :t", :t => t)
Anda tidak dapat membandingkan timestamp
kolom dengan integer di PostgreSQL tetapi Anda bisa di SQLite. Anda harus membandingkan timestamp
dengan timestamp
lainnya (atau date
) atau string yang dapat diuraikan sebagai timestamp
. SQL ini tidak akan berfungsi:
SELECT "events".* FROM "events" WHERE (datetime < 132462148)
tapi ini akan:
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23 06:52:25.096869')
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23')
Ada beberapa pelajaran di sini:
- Anda juga harus mulai mengembangkan di atas PostgreSQL jika Anda akan menerapkan Heroku, ActiveRecord tidak akan melindungi Anda dari semua perbedaan antara berbagai database.
- Anda harus membiarkan ActiveRecord khawatir tentang masalah konversi jenis sebanyak mungkin, jika Anda membandingkan dengan tanggal atau waktu, gunakan placeholder dan berikan AR objek waktu dari beberapa jenis dan biarkan AR khawatir tentang hal itu.
- Gunakan placeholder alih-alih interpolasi string jika memungkinkan.