(我在 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?