So speichern Sie eine Zeitzone korrekt mit Ruby und MongoId?
Bitte entschuldigen Sie mich, wenn dies ein bisschen ein noob Problem:
Habe ich eine app, wo Benutzer können Ihre eigenen Zeitzonen in Ihrem Profil.
Wenn jemand einen Lineup (app-spezifische Terminologie), ich Tue das folgende:
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
Ich dann speichern Sie das Lineup:
Lineup.create({
:date => time.gmtime,
:uid => user._id,
:pid => product._id
})
Diese sollten (in der Theorie) save the date-wie gmtime, aber ich bekomme Folgendes beim anzeigen der Rekord:
{
"_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"
}
Wie Sie sehen können, das Feld "Datum" ist falsch - es immer noch die Aufrechterhaltung der Benutzer-Zeitzone, es sollten GMT, nicht timezone bestimmten.
Wenn ich der Ausgabe.gmtime, bekomme ich die richtige Zeit (das gespeichert werden soll):
2011-10-26 11:30:00 UTC (correct)
Irgendwelche Ideen, wie das speichern der GMT-Datum, so dass es tatsächlich spart das GMT-Datum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie Sie benötigen, so geben Sie das Feld geben Sie Ihrer date-Attribut. Ich würde ein Zeit-Feld, wenn Sie möchten mongoid zu handhaben, die Zonen richtig.
Sie werden wahrscheinlich auch wollen, legen Sie die folgenden in config/mongoid.yml
Das klingt eingängig, aber dies ist der aktuelle Weg, um mongoid Verwendung von UTC als Standard-Zeitzone.
Schließlich haben Sie einen Blick auf die mongoid-metastamp gem. Es wird Ihnen viel bessere Unterstützung für das Abfragen über mehrere Zeitzonen hinweg, während immer noch nahtlos arbeiten wie ein native-Zeit-Feld.