【问题标题】:ActiveRecord model with datetime stamp with timezone support attribute带有日期时间戳和时区支持属性的 ActiveRecord 模型
【发布时间】:2011-01-09 10:32:52
【问题描述】:

Rails 非常棒,它将通过Time.zone 在应用程序中支持整体时区。我需要能够支持用户为记录选择的时区。用户将能够为记录选择日期、时间和时区,我希望针对用户选择的时区进行所有计算。

我的问题是处理用户选择的时区的最佳做法是什么。该模型将time_zone_selectdatetime_select 用于两个不同的属性timezonescheduled_at。当模型保存时,scheduled_at 属性被转换为本地定义的Time.zone

当用户返回编辑带有datetime_selectscheduled_at 属性时,日期时间设置为转换后的Time.zone 时区,而不是timezone 属性。有没有很好的方法来处理转换到用户选择的时区?

【问题讨论】:

    标签: ruby-on-rails datetime activerecord timezone


    【解决方案1】:

    您可以在before_filter 中处理此问题,无论是在指定的控制器中还是在应用程序范围内。看这个例子:

    # controllers/application.rb
    before_filter :set_user_time_zone
    
    private
    
    def set_user_time_zone
      Time.zone = current_user.timezone if logged_in?
    end
    

    Ryan Bates 对此进行了截屏:Time Zones in Rails 2.1

    【讨论】:

    • 感谢您的反馈。这与我所寻找的相差甚远,因为我并不想在纯粹的用户层面上做这件事。我认为我需要做的是有两个时间戳,一个代表用户选择的时间和时区,另一个代表 UTC 版本。
    • 我不建议这样做,因为这会导致混淆时间戳代表什么时间。最好默认为 UTC 来存储时间戳并在显示/更新时来回转换它们。 ActiveRecord 为您管理。
    猜你喜欢
    • 2015-07-26
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2012-09-17
    • 1970-01-01
    • 2011-07-03
    • 2018-12-02
    相关资源
    最近更新 更多