【问题标题】:Rails 'config.time_zone' doesn't apply to datetime data loaded into a text_field. Fix?Rails 'config.time_zone' 不适用于加载到 text_field 中的日期时间数据。使固定?
【发布时间】:2011-09-27 02:23:10
【问题描述】:

当我在表单中使用 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:00 UTC 写入数据库,在 show 页面上呈现 8:00(感谢 config.time_zone 考虑了偏移量),但是当我尝试编辑该对象,表单的 start_time 的 text_field 加载为 13:00(如果未更改提交,则在存储在数据库中时变为 18:00)。

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

有没有办法让 Rails 将 config.time_zone 偏移量应用于文本字段?

运行 Rails 3.0.5,部署到 Heroku。

对于几周前问了一个非常similar question 的问题提前道歉。那里的信息仍然适用,我现在对问题有了更好的理解,所以我重新问了。

【问题讨论】:

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


    【解决方案1】:

    TimeZone#utc_to_local转换怎么样?

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

    【讨论】:

      【解决方案2】:

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

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

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

      这是我要尝试的另一个潜在解决方案的中间步骤,我惊讶地发现它完全可以自己工作(再次,使用我已经在 'config 中设置的'config.time_zone' /application.rb')。

      我已经对其进行了测试,它在适用时也应用了正确的 DST 偏移量(正如人们所期望的那样,因为设置了“config.time_zone”)。

      【讨论】:

      • 确实,即使是 4 年后也是最好的解决方案。如果您使用简单的形式:f.input :time_start, input_html: {value: f.object.time_start}
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多