Шаги, чтобы произвести это:
prompt>rails test_app
prompt>cd test_app
prompt>script/generate scaffold date_test my_date:datetime
prompt>rake db:migrate
Теперь отредактируйте app/views/date_tests/edit.html.erb
:
<h1>Editing date_test</h1>
<% form_for(@date_test) do |f| %>
<%= f.error_messages %>
<p>
RIGHT!<br/>
<%= text_field_tag @date_test, f.object.my_date %>
</p>
<p>
WRONG!<br />
<%= f.text_field :my_date %>
</p>
<p>
<%= f.submit 'Update' %>
</p>
<% end %>
<%= link_to 'Show', @date_test %> |
<%= link_to 'Back', date_tests_path %>
теперь отредактируйте config/environment.rb
:
#add this
config.time_zone = 'Central Time (US & Canada)'
Это воссоздает проблему, с которой я столкнулся в моем приложении. Проблема с моим приложением заключается в том, что я храню дату в скрытом поле и отображаю «удобную для пользователя» версию. Создание ресурса работает нормально, но как только я пытаюсь отредактировать его, время меняется (оно добавляет разницу между моей текущей конфигурацией часового пояса и UTC). перейдите к http://localhost:3000/date_tests/new и сохраните время, затем перейдите к его повторному редактированию, и вы получите два разных представления даты / времени: одно будет сохранено неправильно, а другое -
.
РЕДАКТИРОВАТЬ: Кто-то может спросить, почему бы просто не использовать тот, который работает. Проблема в том, что я использую вложенный атрибут, поэтому я не могу это сделать. Я пытался сделать это:
# from my real app:
<% appt.fields_for :time_slot do |ts| %>
<%=h ts.object.start_at.strftime('%T') %>
<%= hidden_field ts.object.start_at, :start_at %>
<%= hidden_field ts.object.end_at, :end_at %>
<% end %>
но html выдает:
<div>
10:00:00
<input id="2010-05-30_10:00:00_-0500_start_at" name="2010-05-30 10:00:00 -0500[start_at]" type="hidden">
<input id="2010-05-30_10:10:00_-0500_end_at" name="2010-05-30 10:10:00 -0500[end_at]" type="hidden">
<input id="appointment_block_appointments_attributes_0_time_slot_attributes_id" name="appointment_block[appointments_attributes][0][time_slot_attributes][id]" type="hidden" value="95">
</div>