2010-06-25 9 views
6

Używam następujący kod w moim kontrolera:Heroku Postgres error - operator nie istnieje znacznik czasu bez strefy czasowej = całkowita

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

Chociaż to działa dobrze na moim lokalnym SQLite, mam „operator nie istnieje znacznik czasu bez timezone = integer "błąd.

Nie wiem dokładnie, co zmienić.

Pomysły?

Dzięki.

Odpowiedz

7

Twoje parametry @monday i @friday są błędne, muszą być typu "znacznik czasu bez strefy czasowej", ale są tworzone jako liczby całkowite, zobacz errormessage. SQLite nie ma żadnych datetime-datatypów, więc daty są zapisywane jako tekst lub liczby całkowite (unix-timestampy). To dlatego nie otrzymujesz errormessage w SQLite.

Upewnij się, że tworzysz sygnatury czasowe takie jak "2004-10-19 10:23:54", a wszystko będzie dobrze. Innym rozwiązaniem mogłoby być PostgreSQL-funkcja to_timestamp() zamienić Unix timestamp do datownika:

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

które polecacie? konwersja w postgresie lub tworzenie właściwego formatu dla @monday i @friday? Jeśli to drugie, jak, patrzyłem na defekty rubinowe na czas ... nie wiadomo, co bym zrobił ... dzięki! – Angela

+0

Użyj właściwego formatu, teraz możesz również użyć prostego indeksu w tej kolumnie, aby przyspieszyć działanie. –

Powiązane problemy