如何在Rails中管理用户的时区?

问题描述 投票:3回答:1

我知道有很多宝石可以完成这项工作,但是我认为将整个宝石用于如此简单的任务实在是太过分了。

我发现js非常简单:

Intl.DateTimeFormat().resolvedOptions().timeZone

答案是一个类似于"Europe/Moscow"的字符串。

我们可以轻松地将其保存到数据库

create_table :users do |t|
  t.string :time_zone, default: "UTC"
  ...
end

并设置用户的时区,如:

# app/controllers/application_controller.rb
around_action :set_time_zone, if: :current_user

private

def set_time_zone(&block)
  Time.use_zone(current_user.time_zone, &block)
end

所以我的[[question是:我错过了重要的事情(为什么使用这些宝石)还是可以像上面写的那样(没有任何宝石)做到这一点?

[ThoughtBot's articlethis question的启发

javascript ruby-on-rails ruby timezone
1个回答
1
投票
您不会错过任何重要的东西。每种语言的基本部分都有不同种类和数量的钟声和口哨声。 [ECMAScript Internationalization API]的规范(赋予您编写Intl.DateTimeFormat().resolvedOptions().timeZone的权力)的规范直到2012年才开始引入,这是在JavaScript最初诞生几年之后的。]

有点类似,在后端,Rails框架提供了自己的API,借助Rails的Time包装器,您可以创建TZInfo实例,并具有ActiveSupport::TimeZone gem的更高的准确性和功能。您甚至都不会偏离Ruby中的习惯,只需在Rails的Time上直观地调用TZInfoTime方法即可。

您上面编写的代码在技术上依赖于gem。 Rails是一颗宝石!也许您要进行的描述是我们应该使用我们的语言和框架附带[的库,还是应该使用

out获得新的库。这种差异并不像库的可靠性那么重要。这样您就不会丢失任何东西!那里只是一个丛林:)

© www.soinside.com 2019 - 2024. All rights reserved.