Приложение Rails config.time_zone не применяется при заполнении полей формы для представления «/ edit» - PullRequest
5 голосов
/ 14 июня 2011

Я указал config.time_zone в моем приложении Rails, но полученные значения в полях формы по-прежнему отображаются как UTC (что создает проблемы при обновлениях). Разве это не должно быть переведено в местное время в указанной зоне?

/ config / application.rb (только соответствующие строки):

module ExampleSite
    class Application < Rails::Application

        config.time_zone = 'Central Time (US & Canada)'
    end
end

/ events / edit.html.erb (полный файл):

<h1>Edit This Event</h1>
<%= form_for(@event) do |f| %>
    <%= render 'fields', :f => f %>
    <div class="actions">
        <%= f.submit "Update Event" %>
    </div>
<% end %>

/ events / _fields.html.erb (только соответствующие строки:)

<div class="field">
    <%= f.label      :time_start, "Start Time" %><br />
    <%= f.text_field  :time_start, :class => "datetimefield" %>
</div>
<div class="field">
    <%= f.label      :time_end, "End Time (if applicable)" %><br />
    <%= f.text_field  :time_end, :class => "datetimefield" %>
</div>

Когда я вписываю строку даты и времени для создания нового события, значение сохраняется должным образом (в UTC) и отображается в моих представлениях по желанию (в местном часовом поясе), где оно было отображало UTC до переключатель config.time_zone (так что я знаю, что переключатель был сделан).

Но когда я иду редактировать любой другой атрибут события, время, отображаемое в поле формы в представлении / edit, является временем UTC - это означает, что когда я обновляю событие, время повторно сохраняется как время было введено заново и предположительно локально, что смещает время на 5 часов (мое локальное отличие от UTC), поскольку система преобразует «обновленный» атрибут времени в UTC для хранения.

Как сделать так, чтобы локализованное время отображалось в полях формы?

Запуск Rails 3.0.5, развертывание в Heroku (хотя проблема существует как в среде разработки, так и в рабочей среде)

Ответы [ 3 ]

8 голосов
/ 05 июля 2011

Оказывается, настоящая проблема была в самих text_fields.

Моя настройка «config.time_zone» работала очень хорошо (без каких-либо дополнительных методов или хаков) в моих представлениях «index» и «show», и она работала и в представлении «edit», пока я использовал выбор даты и времени вместо текстового поля.

Поскольку для меня это было невозможно (я использовал DatePicker пользовательского интерфейса jQuery, которому требуется поле text_), я исследовал проблему, связанную с text_field, и ответил на другой мой собственный вопрос StackOverflow по теме .

Если у вас проблема с text_field, проверьте этот вопрос / ответ.

1 голос
/ 03 июля 2011

Просто используйте это:

  <div class="field">
    <%= f.label :time_start %><br />
    <%= f.datetime_select :time_start, :class => "datetimefield" %>
  </div>

Я создаю небольшое приложение для этого, и оно работает.

0 голосов
/ 30 июня 2011

Вы можете сделать что-то вроде этого:

heroku config:add TZ=America/Chicago

Это должно решить вашу проблему с Heroku.

...