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

时间:2011-06-13 20:54:21

标签: ruby-on-rails ruby-on-rails-3 forms datetime timezone

我在我的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(完整档案):

<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格式)并在我的视图中根据需要(在本地时区)呈现呈现的位置在 config.time_zone开关之前的UTC (所以我知道开关已经完成)。

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

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

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

3 个答案:

答案 0 :(得分:8)

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

我的'config.time_zone'设置在我的'索引'和'显示'视图中工作正常(没有任何额外的方法或黑客),并且它也在'编辑'视图中工作,只要我使用一个datetime_select而不是text_field。

由于这不是我的选择(我使用的是jQuery UI的DatePicker,需要text_field),因此我调查了text_field特定问题和answered another StackOverflow question of my own on the subject

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

答案 1 :(得分:1)

请使用:

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

我为此创建了一个小应用程序并且它可以正常工作。

答案 2 :(得分:0)

您可以这样做:

heroku config:add TZ=America/Chicago

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