2011-10-17 13 views
9

Proszę mi wybaczyć, jeśli jest to problem noob:Jak poprawnie zapisać strefę czasową za pomocą Rubiego i MongoID?

Mam aplikację, w której użytkownicy mogą ustawiać własne strefy czasowe w swoim profilu.

Kiedy ktoś doda lineup (specyficzna aplikacja terminologię), I wykonaj następujące czynności:

time = ActiveSupport::TimeZone.new(user.timezone).parse(
    "Wednesday, 26 October, 2011 13:30:00" 
) 

# This outputs: 2011-10-26 13:30:00 +0200 - valid according to the user selected TZ 

I następnie zapisać składzie:

Lineup.create({ 
    :date => time.gmtime, 
    :uid => user._id, 
    :pid => product._id 
}) 

ten powinien (teoretycznie) zapisać datę jako gmtime, ale otrzymuję następujące informacje podczas przeglądania rekordu:

{ 
    "_id": ObjectId("4e9c6613e673454f93000002"), 
    "date": "Wed, 26 Oct 2011 13: 30: 00 +0200", 
    "uid": "4e9b81f6e673454c8a000001", 
    "pid": "4e9c6613e673454f93000001", 
    "created_at": "Mon, 17 Oct 2011 19: 29: 55 +0200" 
} 

Jak widać, pole daty jest wr ong - nadal utrzymuje strefę czasową użytkownika, powinien to być GMT, a nie strefa czasowa.

Jeśli I wyjściowego time.gmtime, uzyskać odpowiedni czas (które powinny być zapisane):

2011-10-26 11:30:00 UTC (correct) 

pomysłów jak zapisać datę GMT tak, że faktycznie zapisuje datę GMT?

Odpowiedz

11

Wygląda na to, że musisz określić typ pola atrybutu daty. Użyłbym pola Czas, jeśli chcesz, aby mongoid prawidłowo obsługiwał strefy.

class Lineup 
    include Mongoid::Document 
    field :date, type: Time 
end 

Będziesz także prawdopodobnie chcesz ustawić następujące w config/mongoid.yml

defaults: &defaults 
    use_utc: false 
    use_activesupport_time_zone: true 

Brzmi to sprzeczne z intuicją, ale to jest obecny sposób, aby mongoid używała czasu UTC jako domyślnej strefy czasowej.

Wreszcie, spójrz na klejnot mongoid-metastamp. Zapewni to znacznie lepszą obsługę zapytań w wielu strefach czasowych, a jednocześnie płynnie działa jak natywne pole czasu.

+1

Działa również z DateTime w bieżących wersjach Mongoida (mam na 2.4.7). Zobacz https://github.com/mongoid/mongoid/issues/1135 –

Powiązane problemy