So speichern Sie Daten in der lokalen Zeitzone db mit rails3?
Habe ich Rails3-Anwendung mit model user und Feld expires_at wie folgt erstellt:
t.column :expires_at, :timestamp
In meiner Datenbank (postgresql) es hat den Typ:
timestamp without timezone
Das problem ist, wenn ich rufe:
@user.expires_at = Time.now
@user.save
es ist gespeichert in der Datenbank mit der UTC-Zeitzone (meine lokale Zeit ist UTC + 1:00, Warschau), aber ich möchte das nicht. Ich will nur Zeit mit meinen lokalen Zeitzone gespeichert in der Datenbank (2011-03-30 01:29:01.766709, nicht 2011-03-29 23:29:01.766709)
Kann ich erreichen, das mit rails3?
- Vorsicht! Wenn Sie Benutzer, die über mehr als eine Zeitzone, das bekommen unordentlich fallen. Ich ziehe alle meine Zeiten als UTC in die DB, und nur Sie zu konvertieren nicht-UTC für die Anzeige auf der client-Seite (Sie können konvertieren eine Zeit von UTC, die Zeitzone einstellen, in der ein Benutzer das OS mit ein wenig JavaScript). Viel Glück!
- was Datenbank-Abfragen, wenn ich Eingaben von user?? ActiveRecord convers es um die UTC automatisch?
- Das ist eine gute Frage, aber ich bezweifle, dass es - wäre es zu wissen, die Zeitzone des Benutzers in der Lage sein, um die richtigen Konvertierung. Wenn Sie speichern möchten, die vom Benutzer gelieferten Daten, die als UTC, wirst du wohl konvertieren müssen Sie die client-Seite (urgh). Ich habe date.js für meine client-side-Konvertierungen, aber ich habe nur getan, Anzeige - ich habe nie akzeptiert Datumsangaben als Eingabe...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für das spart Zeit in der lokalen Zeitzone-Datenbank in diesem muss festgelegt werden, in
application.rb
Wenn Sie nur wollen, verwenden Sie die lokale Uhrzeit auf bestimmte Spalten, anstatt als Globale Einstellung, dann die Schienen-Dokumentation sagt uns dies:
(Dies ist auch überspringt Zeit-zone Umstellung auf das schreiben, nicht nur Lesen). Und Sie können übergeben Sie ein array von Symbolen für mehrere Attribute.
Ich bin nicht sicher, welche Versionen von Schienen diese wurde eingeführt, obwohl.
psql
ich alle Werte, umgewandelt zu UTC, statt wie in der ursprünglichen Zeitzone.config.active_record.time_zone_aware_attributes = false
um zu verhindern, dass die Konvertierung der UTC-beim speichern in die Datenbank