【发布时间】:2012-04-19 07:47:11
【问题描述】:
(我在 Ruby MRI 1.9.2 上使用 Rails 3.2.3)
所有内容都集中存储在 UTC 中。这很好。每个用户都有一个“时区”属性。我的 ApplicationController 有一个前置过滤器,可将 Time.zone 调整为用户存储的时区。这也不错。
鉴于上述情况,如果我的用户使用时间完成日期时间选择,则该时间预计在 Time.zone 中,Rails 将自动调整并将其保存为 UTC。这也不错。
现在:我希望让我的用户填写另一个时区的时间,然后将其存储为 UTC。但是,Rails 期望已完成的日期时间选择已在(之前由 ApplicationController 设置的)Time.zone 中填写。因此,Rails 错误地调整为 UTC。
如何实现将输入的时间保存为第三时区的目标?
插图:
我的使用场景是佛罗里达州的用户正在调整属于西海岸酒店的文档的日期。他们正在寻求进入西海岸的时间。
我正在使用 jQuery 为带有样式选择器的文本框设置样式,所以我有一种方法可以将字符串输出到文本框:
<%= f.text_field(:created_at, :value => adjusted_to_hotel_time(@document.created_at), :class => 'text datetime_picker') %>
def adjusted_to_hotel_time(time)
time.in_time_zone(@current_hotel.timezone).to_s(:admin_jquery) # formatted for the jQuery datetime_picker text fields.
end
这是完美的工作,但当保存@document 时Rails 不正确地调整为UTC。我不知道我不知道什么 - 我如何将在该字段中输入的数据“标记”为在 @current_hotel.timezone 中,以便 Rails 在保存父对象时正确偏移到 UTC?
【问题讨论】:
标签: ruby-on-rails ruby time timezone