2010-06-25 10 views
6

estoy usando el siguiente código en mi regulador:heroku Postgres error - operador no existe indicación de la hora sin zona horaria = entero

@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]) 

pesar de que funciona bien en mi local SQLite, tengo no existe un "operador timestamp sin timezone = integer "error.

No estoy exactamente claro qué cambiar.

Ideas?

Gracias.

Respuesta

7

Sus parámetros @monday y @friday son incorrectos, tienen que ser del tipo "indicación de fecha y hora sin zona horaria" pero se crean como enteros, consulte el mensaje de error. SQLite no tiene ningún tipo de datos de fecha y hora, por lo que las fechas se almacenan como texto o enteros (marcas de tiempo de Unix). Es por eso que no obtienes un mensaje de error en SQLite.

Asegúrate de crear marcas de tiempo como '2004-10-19 10:23:54' y todo irá bien. Otra opción podría ser la función de PostgreSQL-to_timestamp() para convertir su marca de tiempo Unix a una marca de tiempo:

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

la que me recomiendan? convirtiendo en postgres o creando el formato correcto para @monday y @friday? Si este último, cómo, miré el ruby ​​defs por tiempo ... no está claro qué haría diff ... ¡gracias! – Angela

+0

Utilice el formato correcto, ahora también puede usar un índice simple en esta columna para acelerar las cosas. –

Cuestiones relacionadas