Rails 'config.time_zone' gilt nicht für Datetime-Daten, die in ein text_field geladen werden. Fix?

8

Wenn ich ein datetime_select in meinem Formular verwende, passt Rails die Zeitzone der datetime-Daten korrekt an (gemäß meiner config.time_zone -Einstellung) und rendert die richtig zonierte Zeit in der edit -Ansicht desselben Formulars .

Aber wenn ich versuche, dieselben Daten in ein text_field (für die gleiche edit -Ansicht des gleichen Formulars) abzurufen, scheint Rails nicht für die Zeitzone angepasst zu sein.

/events/edit.html.erb (vollständige Datei):

%Vor%

/events/_fields.html.erb (nur relevante Zeilen:)

%Vor%

Beispiel: Der Offset meiner Zone beträgt -500. Ich gebe 8:00 als start_time in das Formular ein, 13:00 UTC wird in die Datenbank geschrieben, 8:00 wird auf der show Seite gerendert (Danke an config.time_zone für den Offset), aber wenn ich es versuche editiere dieses Objekt, das text_field des Formulars für die start_time wird mit 13:00 geladen (was, wenn es unverändert gesendet wird, 18:00 wird, wenn es in der Datenbank gespeichert wird).

Das ist problematisch, weil ich versuche, den DatePicker von jQuery UI (mit einem TimePicker-Add-On) zu verwenden, der auf dem text_field beruht (funktioniert nicht mit datetime_select ).

Gibt es eine Möglichkeit, dass Rails den config.time_zone offset auf Textfelder anwendet?

Rails 3.0.5 wird auf Heroku bereitgestellt.

Entschuldigung im Vorraus, dass Sie eine sehr ähnliche Frage vor ein paar Wochen. Die Information dort gilt immer noch, ich habe jetzt ein besseres Verständnis für das Problem, also habe ich nochmal gefragt.

    
jasonmklug 01.07.2011, 23:17
quelle

2 Antworten

16

Wie ich in der Frage gesagt habe, bestand das Hauptproblem darin, ActiveRecord dazu zu bringen, die existierende 'config.time_zone' Einstellung auf text_fields anzuwenden.

Es stellt sich heraus, dass es eine sehr einfache und zukunftssichere Möglichkeit gibt, dies zu ermöglichen: Fügen Sie einfach explizit einen Wert hinzu und ziehen Sie genau die gleichen Daten - keine zusätzlichen / neuen Methoden zum Aufruf! In meinem Fall bedeutete das:

%Vor%

Dies war ein Zwischenschritt zu einer anderen möglichen Lösung, die ich ausprobieren wollte, und ich war überrascht, dass es alleine funktionierte (wiederum mit der 'config.time_zone', die ich bereits in 'config eingestellt hatte /application.rb ').

Ich habe es getestet, und es wendet den richtigen DST-Offset an, wenn es auch zutrifft (genau wie man es erwarten würde, da 'config.time_zone' eingestellt ist).

    
jasonmklug 04.07.2011, 06:14
quelle
1

Wie wäre es, es mit TimeZone#utc_to_local zu konvertieren?

Sehen Sie sich die API-Dokumentation Ссылка

an     
basicxman 02.07.2011 03:59
quelle