如何使用 Ruby 和 MongoId 正确保存时区?

2024-04-03

如果这是一个菜鸟问题,请原谅:

我有一个应用程序,用户可以在其个人资料中设置自己的时区。

当有人添加阵容(应用程序特定术语)时,我会执行以下操作:

time = ActiveSupport::TimeZone.new(user.timezone).parse(
  "Wednesday, 26 October, 2011 13:30:00"
)

# This outputs: 2011-10-26 13:30:00 +0200 - valid according to the user selected TZ

然后我保存阵容:

Lineup.create({
   :date => time.gmtime,
   :uid  => user._id,
   :pid  => product._id
})

这应该(理论上)将日期保存为 gmtime,但在查看记录时我得到以下信息:

{
  "_id": ObjectId("4e9c6613e673454f93000002"),
  "date": "Wed, 26 Oct 2011 13: 30: 00 +0200",
  "uid": "4e9b81f6e673454c8a000001",
  "pid": "4e9c6613e673454f93000001",
  "created_at": "Mon, 17 Oct 2011 19: 29: 55 +0200"
}

正如您所看到的,日期字段是错误的 - 它仍然维护用户时区,它应该是 GMT,而不是特定于时区的。

如果我输出 time.gmtime,我会得到正确的时间(应该保存):

2011-10-26 11:30:00 UTC (correct)

有什么想法如何保存 GMT 日期,以便它真正保存 GMT 日期吗?


看起来您需要指定日期属性的字段类型。如果您希望 mongoid 正确处理区域,我会使用时间字段。

class Lineup
  include Mongoid::Document
  field :date, type: Time
end

您可能还想在 config/mongoid.yml 中设置以下内容

defaults: &defaults
  use_utc: false
  use_activesupport_time_zone: true

这听起来有悖常理,但这是当前让 mongoid 使用 UTC 作为默认时区的方法。

最后,看一下mongoid-metastamp https://github.com/sporkd/mongoid-metastamp宝石。它将为您提供更好的跨多个时区查询支持,同时仍然像本机时间字段一样无缝工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Ruby 和 MongoId 正确保存时区? 的相关文章

  • flutter 中 Future.delayed 与 Timer 有什么区别

    我想知道延迟代码执行的 Future delayed 和 Timer 方法之间的区别 两者似乎都做同样的事情 未来 延迟 Future delayed const Duration milliseconds 500 code VS Time
  • MongoDB,从数组中删除对象

    Doc id 5150a1199fac0e6910000002 name some name items id 23 name item name 23 id 24 name item name 24 有没有办法从数组中提取特定对象 IE
  • 如何通过 PHP 轻松转换 UTC 日期?

    我将日期存储在 MySQL 数据库中的 UTC 日期时间字段中 我正在使用 PHP 并且调用了 date timezone set UTC 以便对 date 不带时间戳 的所有调用都返回 UTC 格式的日期 然后我有了它 以便给定的网站可以
  • ruby on Rails,会话过期通知

    我正在使用 ruby 1 9 3 和 Rails 3 2 我的实际会话处理如下所示 会话助手 def sign in user cookies remember token value user remember token expires
  • gem install rmagick 在 OS X El Capitan 上失败

    几天前我升级到 El Capitan 并运行了 brew update brew upgrade 它更新了 imagemagick 导致 ruby 的 rmagick gem 停止工作 我想没问题 我就跑 gem install rmagi
  • Rails:渲染不起作用,仍然出现“模板丢失”

    我目前正在学习 Rails 指南 我完成了这些步骤 但仍然遇到错误 我的 Ruby 版本是ruby 2 1 1p76Rails 版本是4 0 4 按照指南的指示 我创建了一个Article Controller class Articles
  • 无需别名的 Ruby YAML 编写

    我正在从 ruby 将数据写入 yaml 文件 并且经常在该文件上添加别名 像 id001 somekey somevalue id001 就我而言 我使用 yaml 文件来aid可读性并将名称添加到文件中的值 因为现有数据只是 没有键的分
  • 在 ruby​​ 中读/写受密码保护和加密的文件

    我想加密一个 ruby 程序将从中加载数据的文件 此外 我需要程序在启动时提示输入密码 该密码将用于解密文件 换句话说 该文件需要加密地驻留在计算机上 只有拥有密码的用户才能运行该应用程序 我已经开始研究 openpgp 但据我了解 这仍然
  • 由于符号链接错误,无法在 Mac OSX 10.8.1 中安装 ruby​​-1.9.2

    首先 我尝试了常见的rvm安装 rvm安装1 9 2 但是 显示了以下错误 The provided compiler usr bin gcc is LLVM based it is not yet fully supported by r
  • 如何将完整的日期格式拆分为日期和时间?

    我有很多格式为我的示例所示的字符串 我必须解析它们 我正在尝试确定今天是哪根弦 我的问题是 时间快到了 我只需要比较那个日期 接下来我想检查时间是否在 after 和 before 的两个时间戳 HH mm ss 之间 但存在问题 日期几乎
  • 从类内部调用属性访问器方法[重复]

    这个问题在这里已经有答案了 我正在尝试调用我的类属性编写器之一 但由于某种原因它永远不会被调用 下面是一些代码 可以使这一点更清楚 class Test attr reader test def test val puts Called t
  • Mongodb 聚合数组中的子文档

    我正在使用 mongodb 作为后端实现一个小型应用程序 在此应用程序中 我有一个数据结构 其中文档将包含一个包含子文档数组的字段 我使用以下用例作为基础 http docs mongodb org manual use cases inv
  • 使用复选框过滤列表

    我有一个电影列表及其评级 在我的页面顶部 我有一个表单 其中提供了一个复选框列表 其中显示了每个可用的评级 G PG 13 等 一旦用户单击复选框并点击提交 我只想显示所选的电影 在我的索引方法中 我有一个名为的实例变量 filtered
  • Mongoose 独特的验证不起作用。保存重复条目

    我正在开发一个 NodeJS 应用程序 其中express是框架 MongoDB是数据库 我正在使用猫鼬插件 我有一个父母模型 我已经添加了独特 真实到场 mobile 但是每当我添加相同的手机号码时 唯一性验证就会失败 除了保存重复的文档
  • PHP MongoDb 驱动程序:如何设置执行代码的超时

    我有以下代码 它在 MongoDb 端执行一段代码 mongoCode new MongoCode Some JS code db gt execute mongoCode array socketTimeoutMS gt 1000000
  • 当操作系统显示语言为非英语时获取本地时区标识符

    奇怪的是 TimeZone CurrentTimeZone StandardName根据计算机显示语言返回本地化名称 我想要一个可以提供给的程序化标识符TimeZoneInfo在下面的代码中 TimeZoneInfo timeZoneInf
  • UNIX 统计时间格式

    是否可以格式化 stat 的时间输出 我在用 stat c n A z filename 在 bash 脚本中 但它的时间格式不是我想要的 是否可以在命令中更改此格式 或者我必须稍后手动执行此操作 示例输出如下 lib drwxr xr x
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • 使用 Mongoose 无法找到按 ObjectId 搜索的文档

    Campaign find client id req param client id error campaigns gt if error response error error message else for campaign i
  • 管理员未授权 Mongodb 执行 listDatabases 命令

    删除 mongodb 用户后 无法重新连接 mongo 没有 验证 我创造了超级用户 https docs mongodb org v2 6 reference built in roles superuser roles tomuser

随机推荐