在为“/ edit”视图填充表单字段时,Rails app config.time_zone不适用

我在我的Rails应用程序中指定了config.time_zone,但表单字段中检索到的时间仍然呈现为UTC(这会在更新时产生问题)。 这不应该转换为指定区域的当地时间吗?

/config/application.rb(仅限相关行):

module ExampleSite class Application < Rails::Application config.time_zone = 'Central Time (US & Canada)' end end 

/events/edit.html.erb(完整文件):

 

Edit This Event

f %>

/events/_fields.html.erb(仅限相关行:)

 

"datetimefield" %>

"datetimefield" %>

当我输入datetime字符串来创建一个新事件时,该值被正确保存(以UTC为单位)并在我的视图中根据需要(在本地时区)呈现,它在config.time_zone开关之前呈现UTC(所以我知道开关已经制成了)。

但是当我去编辑事件的任何其他属性时,在/ edit视图中呈现给表单字段的时间是UTC时间 – 这意味着当我更新事件时,时间会被重新保存,就像时间那样已重新输入并假定为本地,当系统将“已更新”时间属性转换为UTC进行存储时,将时间移动5小时(我与UTC的本地差异)。

如何在表单字段中呈现本地化时间?

运行Rails 3.0.5,部署到Heroku(尽管开发和生产环境中存在问题)

事实certificate,真正的问题出在text_fields本身。

我的’config.time_zone’设置在我的’索引’和’显示’视图中运行得很好(没有任何额外的方法或黑客),并且它也在’编辑’视图中工作,只要我使用datetime_select代替text_field的。

由于这不是我的选择(我使用的是jQuery UI的DatePicker,需要text_field),我调查了text_field特定的问题并回答了我自己关于这个问题的另一个StackOverflow问题 。

如果您遇到text_field问题,请查看该问题/答案。

只需使用:

  
<%= f.label :time_start %>
<%= f.datetime_select :time_start, :class => "datetimefield" %>

我为此创建了一个小应用程序,它的工作原理。

你可以这样做:

 heroku config:add TZ=America/Chicago 

这应该可以解决你在Heroku上的问题。