ruby-on-rails 在Rails中保留用户时区

z0qdvdin  于 2023-05-19  发布在  Ruby
关注(0)|答案(1)|浏览(171)

我正在尝试在Rails中使用TimeZones。
我有一个名为Event的模型,它有datetime字段starts_at和string字段timezone。然而,我对管理这些日期的最佳实践有点困惑,因为我正在处理这些事件的日期,这些日期与应用程序的时区完全不同。
默认情况下,rails使用的是我的应用程序的时区,也就是CEST,所以默认情况下,当我保存一个事件的日期时,它使用这个时区。然而,99%的时间我们认为日期是根据我们在模型上设置时区的客户端来考虑的。所以在我们的时区设置它的默认值并不好。
我是否应该:
1.保持设置这些日期相对于我的时间,如starts_at设置在CEST和解释到客户端的时间,如client_starts_at。然而,这是令人困惑的,因为我们通常输入相对于客户端的时间而不是我们自己的时间的starts_at
1.做一些getter/setter来输入日期作为用户的时间。这避免了大部分问题,因为所有的东西都进入UTC。
1.配置模型或控制器以考虑Eventtimezone字段,从而将每个记录starts_at设置为正确的时区,然后将时区解释为local_starts_at
1.也许我最好把starts_at分成两个字段,把datetime分开?
选项3或4似乎更好,但有没有人知道一个资源,因为这似乎是一个非常常见的问题。我也不确定我是否应该在模型级别上管理这些问题,或者在控制器中处理它。
谢谢
https://thoughtbot.com/blog/its-about-time-zones

isr3a4wc

isr3a4wc1#

可以使用in_time_zone

def client_starts_at
  starts_at.in_time_zone(timezone)
end

无论它是如何存储的,您都将获得正确的时区。
你甚至可以覆盖基方法(不推荐):

def starts_at
  read_attribute(:starts_at).in_time_zone(timezone)
end

相关问题