Погружение в это показывает, что в версии 5.1.6.2 ActiveSupport :: TimeZone time_zone_select
работает как описано, что позволяет нам просто выбрать действительный часовой пояс по умолчанию с Time.zone.name
.Несмотря на то, что по умолчанию (например, «Европа / Амстердам») параметры выбора содержат как «Амстердам», так и «Европа / Амстердам».
Поэтому я предполагаю, что изменения, внесенные в ActiveSupport :: TimeZone вВ Rails 5.2.0 недостаточно учтено влияние, которое они оказывают на time_zone_select
.На данный момент вместо использования расширенного имени часового пояса (например, «Европа / Амстердам») для выбора значения по умолчанию time_zone_select
, я явно ограничиваю его сокращенной формой в качестве обходного пути, например:
# As of Rails 5.2.0 the time_zone_select helper does not accept time zones in format "Europe/Amsterdam"
# anymore. Instead, we should cast this to a selectable value, being "Amsterdam" in this example.
def selectable_time_zone_name(zone_name)
ActiveSupport::TimeZone.all.find{|tz| tz =~ zone_name }&.name
end
, который мы затем можем использовать следующим образом (сюда входит перенос любого расширенного значения имени, которое может иметь атрибут часового пояса):
<% form.object.timezone = selectable_time_zone_name(selectable_time_zone_name(form.object.timezone) || Time.zone.name) %>
<%= form.time_zone_select :timezone %>