2010-06-25 18 views
6

ich den folgenden Code verwenden in meinem Controller:Heroku Postgres Fehler - Betreiber nicht Zeitstempel existieren ohne Zeitzone = integer

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

Obwohl es auf meinem lokalen SQLite arbeitet, habe ich einen „Operator existiert nicht Zeitstempel ohne Zeitzone = Ganzzahl "Fehler.

Ich bin nicht genau klar, was ich ändern soll.

Ideen?

Danke.

Antwort

7

Ihre Parameter @monday und @friday sind falsch, diese müssen vom Typ "timestamp ohne Zeitzone" sein, werden aber als Ganzzahlen erstellt, siehe die Fehlermeldung. SQLite hat keine Datetime-Datentypen, daher werden Daten als Text oder Integer (Unix-Timestamps) gespeichert. Aus diesem Grund erhalten Sie in SQLite keine Fehlermeldung.

Stellen Sie sicher, dass Sie Zeitstempel wie '2004-10-19 10:23:54' erstellen und alles wird gut. Eine weitere Option könnte die PostgreSQL-Funktion sein to_timestamp() Ihre Unix-Zeitstempel zu einem Zeitstempel zu konvertieren:

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

was würden Sie empfehlen? in Postgres konvertieren oder das richtige Format für @monday und @friday erstellen? Wenn letzteres, wie, sah ich auf den Rubin für die Zeit ... nicht klar, was ich tun würde Diff ... Danke! – Angela

+0

Verwenden Sie das richtige Format, jetzt können Sie auch einen einfachen Index für diese Spalte verwenden, um die Dinge zu beschleunigen. –

Verwandte Themen