【问题标题】:How to manage user's timezone in Rails right?如何在 Rails 中管理用户的时区?
【发布时间】:2020-01-06 05:24:26
【问题描述】:

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

我发现js做起来很简单:

Intl.DateTimeFormat().resolvedOptions().timeZone

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

我们可以很容易的保存到db中

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

所以我的问题是:我是否遗漏了一些重要的东西(为什么要使用这些宝石)或者我可以像上面写的那样做(没有任何宝石)?

灵感来自 ThoughtBot's articlethis question

【问题讨论】:

标签: javascript ruby-on-rails ruby timezone


【解决方案1】:

你不会错过任何重要的东西。每种语言都有不同种类和数量的装饰其基本部分的花里胡哨。 “ECMAScript Internationalization API”(赋予您编写 Intl.DateTimeFormat().resolvedOptions().timeZone 的能力)的规范直到 2012 年才推出,也就是 JavaScript 首次构思的几年后。

在后端有点类似,Rails 框架提供了自己的 API,通过 Rails 的 ActiveSupport::TimeZone 包装器,您可以使用 TZInfo gem 的附加精度和功能创建 Time 实例。在 Rails 中直观地调用 Time 上的 TimeTZInfo 方法,您甚至不会偏离 Ruby 中的习惯。

您在上面编写的代码在技术上依赖于 gem。 Rails 是一颗宝石!也许你想要的描述是我们是否应该使用 我们的语言和框架的库,或者out 使用新的库。这种差异并不像库的可靠性那么重要。所以你什么都不会错过!那里只是一片丛林:)

【讨论】:

    猜你喜欢
    • 2012-11-06
    • 1970-01-01
    • 2011-11-03
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多