2010-06-25 17 views
6

Tôi đang sử dụng đoạn mã sau vào bộ điều khiển của tôi:Heroku Postgres lỗi - điều hành không tồn tại dấu thời gian mà không cần múi giờ = số nguyên

@monday = (Time.now).at_beginning_of_week 

    @friday = 5.days.since(@monday)-1.second 

    @sent_emails = ContactEmail.all(:conditions => ['date_sent >= ? and date_sent <= ?', @monday, @friday]) 

Mặc dù nó hoạt động tốt trên sqlite địa phương của tôi, tôi có một "nhà điều hành không tồn tại dấu thời gian không có dấu thời gian = số nguyên ".

Tôi không rõ ràng những gì cần thay đổi.

Ý tưởng?

Cảm ơn.

Trả lời

7

Các tham số của bạn @monday và @friday là sai, chúng phải thuộc loại "dấu thời gian không có múi giờ" nhưng được tạo dưới dạng số nguyên, xem thông báo lỗi. SQLite không có bất kỳ kiểu dữ liệu datetime nào, vì vậy các ngày được lưu trữ dưới dạng văn bản hoặc số nguyên (unix-timestamps). Đây là lý do tại sao bạn không nhận được một errormessage trong SQLite.

Đảm bảo bạn tạo dấu thời gian như '2004-10-19 10:23:54' và bạn sẽ ổn. Một tùy chọn khác có thể là chức năng PostgreSQL to_timestamp() để chuyển đổi dấu thời gian của bạn thành dấu thời gian:

@sent_emails = ContactEmail.all(:conditions => ['date_sent >= to_timestamp(?) and date_sent <= to_timestamp(?)', @monday, @friday]) 
+0

bạn sẽ giới thiệu điều gì? chuyển đổi trong postgres hoặc tạo định dạng phù hợp cho @monday và @friday? Nếu sau này, làm thế nào, tôi nhìn vào ruby ​​defs cho thời gian ... không rõ ràng những gì tôi sẽ làm khác ... cảm ơn! – Angela

+0

Sử dụng định dạng đúng, bây giờ bạn cũng có thể sử dụng một chỉ mục đơn giản trên cột này để tăng tốc độ. –

Các vấn đề liên quan