2010-06-25 5 views
6

Sto usando il seguente codice nel mio controller:Heroku Postgres errore - operatore non esiste timestamp senza fuso orario = intero

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

Anche se funziona bene sul mio locale SQLite, ho un "operatore non esiste timestamp senza fuso orario = intero "errore.

Non sono esattamente chiaro cosa cambiare.

Idee?

Grazie.

risposta

7

I parametri @monday e @friday sono errati, devono essere di tipo "data/ora senza fuso orario" ma vengono creati come numeri interi, vedere il messaggio errato. SQLite non ha alcun tipo di datetime-datatypes, quindi le date vengono memorizzate come testo o interi (unix-timestamps). Questo è il motivo per cui non ricevi un errore in SQLite.

Assicurati di creare timestamp come "2004-10-19 10:23:54" e starai bene. Un'altra opzione potrebbe essere la funzione di PostgreSQL-to_timestamp() per convertire il vostro unix-timestamp a un timestamp:

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

che mi consiglia? la conversione in postgres o la creazione del formato giusto per @monday e @friday? Se quest'ultimo, come, ho guardato i ruby ​​defs per tempo ... non è chiaro cosa avrei fatto diff ... grazie! – Angela

+0

Usa il formato giusto, ora puoi anche usare un semplice indice su questa colonna per accelerare le cose. –

Problemi correlati