Rails 应用程序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(完整文件):

<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时间——这意味着当我更新事件时,时间会被重新保存,就像时间被重新输入并假定为本地时间一样,这会使时间偏移5小时(我的本地时间与UTC的差异),因为系统将"更新"的时间属性转换为UTC进行存储。

如何在表单字段中显示本地化时间

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

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

我的"config.time_zone"设置在"index"one_answers"show"视图中运行良好(没有任何额外的方法或技巧),在"edit"视图中也运行良好,只要我使用datetime_select而不是text_field。

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

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

只需使用此:

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

我为此创建了一个小应用程序,它很有效。

您可以这样做:

heroku config:add TZ=America/Chicago

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

相关内容

  • 没有找到相关文章

最新更新