填充'/ edit'视图的表单字段时,Rails app config.time_zone不适用

jas*_*lug 5 forms timezone datetime ruby-on-rails ruby-on-rails-3

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

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

module ExampleSite
    class Application < Rails::Application

        config.time_zone = 'Central Time (US & Canada)'
    end
end
Run Code Online (Sandbox Code Playgroud)

/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 %>
Run Code Online (Sandbox Code Playgroud)

/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>
Run Code Online (Sandbox Code Playgroud)

当我进入的时间字符串创建一个新的事件,该值是正确保存(在UTC)和我的观点呈现为所需的(本地时区),它已经被渲染UTC 之前的config.time_zone开关(所以我知道开关已经制成了).

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

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

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

jas*_*lug 8

事实证明,真正的问题出在text_fields本身.

我的'config.time_zone'设置在我的'index'和'show'视图中​​运行得很好(没有任何额外的方法或黑客),并且它也在'edit'视图中工作,只要我使用datetime_select代替text_field的.

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

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