Mam dziwne zachowanie w mojej aplikacji rails3.
Kiedy wybieram datę za pomocą datepicker interfejsu użytkownika jquery. Widzę to w moim dzienniku
Parameters: {"commit"=>"Save", "log"=> {"log_date"=>"04/20/2011"} ....blah...b}
AREL (1.0ms) INSERT INTO "logs" ("log_date") VALUES ("2011-04-19 22:00:00.000000")
Pominąłem nieistotne informacje.
Jak widać, Railsy nie tłumaczą poprawnej daty. Zmienia się (w tym przypadku) 20.apr na 19.apr.
Kiedy później zadzwonię
<%= log.log_date.strftime("%d.%m.%y") %>
Dostaję datę Corect, ale kiedy wykonuję to zapytanie
@log_times = Log.group(:log_date)
Wszystkie dzienniki są o jeden dzień wcześniej, niż powinny.
W konsoli dziennik w tym przykładzie wygląda następująco
irb(main):017:0> Log.last
=> [#<Log id: 246, log_date: "2011-04-19 22:00:00">]
Tak więc zapisano jedną datę na początku, ale kiedy pokazuję ją w widoku, jest poprawna.
Czemu?
Czy mogę użyć narzędzia pobierającego i ustawiającego, aby to naprawić?
Odpowiedzi:
2 dla odpowiedzi № 1Railsy są zbudowane domyślnie do obsługi stref czasowych. Czasy przechowywane w bazie danych są przechowywane w UTC, a Railsy mają automatycznie przetwarzać tłumaczenie na skonfigurowany czas lokalny.
Czy masz config.time_zone
ustawiony w pliku application.rb? Ponadto polecam używanie DateTime
zamiast Time
kiedy możliwe.