Bạn nên sử dụng trình giữ chỗ để có định dạng phù hợp và đảm bảo rằng nó được trích dẫn chính xác:
t = Time.new
events = Event.where("datetime < :t", :t => t)
Bạn không thể so sánh timestamp
cột với một số nguyên trong PostgreSQL nhưng bạn có thể trong SQLite. Bạn phải so sánh timestamp
của mình với timestamp
khác (hoặc date
) hoặc một chuỗi có thể được phân tích cú pháp dưới dạng timestamp
. SQL này sẽ không hoạt động:
SELECT "events".* FROM "events" WHERE (datetime < 132462148)
nhưng những điều này sẽ:
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23 06:52:25.096869')
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23')
Có một số bài học ở đây:
- Bạn cũng nên bắt đầu phát triển trên PostgreSQL nếu bạn sắp triển khai Heroku, ActiveRecord sẽ không cách ly bạn khỏi tất cả sự khác biệt giữa các cơ sở dữ liệu khác nhau.
- Bạn nên để ActiveRecord lo lắng về các vấn đề chuyển đổi kiểu càng nhiều càng tốt, nếu bạn đang so sánh với ngày hoặc giờ, hãy sử dụng trình giữ chỗ và giao cho AR một đối tượng thời gian thuộc một số loại và để AR lo về điều đó.
- Sử dụng trình giữ chỗ thay vì nội suy chuỗi nếu có thể.