Rails 'config.time_zone' 不适用于加载到text_field中的日期时间数据。修复?



当我在表单中使用datetime_select时,Rails将正确调整日期时间数据的时区(根据我的config.time_zone设置(,并在同一表单的edit视图中呈现正确分区的时间。

但是,当我尝试将相同的数据检索到text_field(对于相同表单的相同edit视图(时,Rails似乎不会根据时区进行调整。

/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>

示例:我的区域偏移量为-500。我在表单中输入8:00作为start_time,13:00UTC被写入数据库,8:00在show页面上呈现(由于config.time_zone考虑了偏移量(,但当我尝试编辑该对象时,表单的start_time的text_field会加载13:00(如果提交时未更改,则存储在数据库中时会变为18:00(。

这是有问题的,因为我正在尝试使用jQuery UI的DatePicker(带有TimePicker插件(,它依赖于text_field(不适用于datetime_select(。

有没有一种方法可以让Rails将config.time_zone偏移量应用到文本字段?

运行Rails 3.0.5,部署到Heroku

为几周前提出了一个非常相似的问题而提前道歉。那里的信息仍然适用,我只是现在对这个问题有了更好的理解,所以我再次询问

正如我在问题中所说,我遇到的主要问题是让ActiveRecord将现有的"config.time_zone"设置应用于text_fields。

事实证明,有一种非常简单且经得起未来考验的方法可以实现这一点:只需显式添加一个:值并提取完全相同的数据——无需调用额外的/新的方法!就我而言,这意味着:

<%= f.text_field  :time_start, :value => f.object.time_start, :class => "datetimefield" %>

这是我将要尝试的另一个潜在解决方案的中间步骤,我惊讶地发现它完全独立工作(同样,使用我已经在"config/application.rb"中设置的"config.time_zone"(

我已经测试过了,它在适用的情况下也应用了正确的DST偏移量(正如人们所期望的那样,因为设置了"config.time_zone"(。

TimeZone#utc_to_local转换它怎么样?

查看API文档,http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

相关内容

  • 没有找到相关文章

最新更新