Выбор даты и времени Formtastic с пользовательским часовым поясом

#formtastic

#formtastic

Вопрос:

У нас есть коллекция записей событий MongoDB с полем даты и времени scheduled_at, которое сохраняется в UTC. У каждого пользователя есть определенный часовой пояс, который мы применяем к меткам времени во внешнем интерфейсе.

Я не могу понять, как заставить выбор даты и времени formtastic учитывать часовой пояс пользователя при редактировании данной записи события. Фрагмент кода выглядит следующим образом:

 f.input :scheduled_at, :as => :datetime, :input_html => { :value => event.scheduled_at.in_time_zone(Time.zone) }
 

Не похоже, что я могу переопределить значение поля таким образом; раскрывающиеся списки scheduled_at по-прежнему просто показывают UTC вместо правильного Time.zone. Кто-нибудь знает, каков правильный подход для этого?

Комментарии:

1. Вы когда-нибудь определяли решение для этого?

Ответ №1:

В моем случае мне нужно было DateSelectInput показать время в UTC (длинная история, для устаревшей поддержки). Единственный способ сделать это — создать входные данные, которые наследуются DateTimeSelectInput в вашем случае ( DateSelectInput в моем). Это связано с тем, что Timeish получает значение непосредственно из объекта формы: https://github.com/justinfrench/formtastic/blob/3.1.3/lib/formtastic/inputs/base/timeish.rb#L159 (по крайней мере, в последней версии)

Это мой код, но вы понимаете суть, просто измените значение и представите себя как родительский класс, чтобы все CSS и все остальное работало по назначению.

 class UtcDateSelectInput < Formtastic::Inputs::DateSelectInput
  def value
     super.utc if super.respond_to? :utc
   end

  def as
    'date_select'
  end
end