
[英]Why does rolling up javascript or css in rails screw with the layout?
[英]Why does Rails screw up timezones when I am editing a resource?
产生此步骤:
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>
好的,事实证明我需要重写“约定”,并具有以下内容:
<%= ts.hidden_field :start_at, :value => ts.object.start_at %>
使用:value
也会给我时区差异,这解决了我的问题!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.