Използвам скъпоценния камък local_time, за да показвам датите в местното време на потребителите и работи добре за вече добавени дати, за да ги показвам в моето местно време.
Имам обаче проблем с добавянето на нова дата и се опитвам да прекарам местното време на потребителите (и съответно датата) през HTML формата. Предполагам, че клиентското устройство има тяхното местно време и затова трябва да го взема.
В момента се опитвам да добавя поле към моя формуляр, както в:
= simple_form_for(@link)do |f|
...
= f.text_field :local_client_time, value: local_time("#{Time.now()}")
но това се показва
August 11, 2014 12:12pm" />
който не само е неправилно оформен и всъщност се показва (трябва да бъде скрит), но също така показва utc време, 5 часа напред от времето на браузъра ми, което е на EST.
Как мога да предам местното време на потребителите във формуляра? (вероятно js)?
Също така не съм сигурен как да го обработя на контролера. В момента имам
@link = Link.new(params[:link])
и няколко други логики след това. Не съм сигурен как да позволя на релсите да се справят с този допълнителен параметър при създаването на екземпляра на Active Record (ще го игнорира ли?) и също така не съм сигурен как след това да използвам local_client_time, което беше предадено през скрито поле, както в формат на дата, който Rails може да използва, за да зададе действително стойността на поле за дата verified_date
Забележка: Ще трябва да покажа полето за всички потребители, независимо дали са влезли или не, но това изглежда добре с скъпоценния камък local_time. Единственият проблем изглежда е с добавянето на поле за дата, което има компонент за време. След 20:00 EST се добавя като следващия ден и след това дисплеят отразява това. Друго поле („content_date“) няма тези проблеми, но за това поле просто използвам f.text_field :content_date, id: 'datepicker', size: 10
и без специална обработка в контролера и поле за дата в базата данни.
И двете полета за дата изглеждат подобно:
| content_date | date | YES | | NULL | |
| verified_date | date | YES | | NULL | |
Също така се чудя дали полето за проверена дата всъщност трябва да бъде дата и час вместо това, за да заобиколя това. Работата е там, че не ми пука за времевия компонент и никога не го използвам или показвам. Най-ниското ниво на детайлност на приложението за полетата за дата/час е 1 ден.
"#{Time.now()}"
ви дава времето на сървъра, а не времето на клиента... - person Uri Agassi   schedule 11.08.2014