Rails 不转换时区 (PostgreSQL)

2024-02-24

我对时区和 postgresql 数据库(Rails 3.0.4,PostgreSQL 9.0)有问题。我正在使用自定义范围,在其中附加一些条件,执行连接等。

问题是,Rails 不会将时间转换为我的本地时区。 这是范围的代码:

  scope :with_activities_within_range_in_week, lambda{ |latMin, lngMin, latMax, lngMax, date|
    select("date_trunc('day', activities.starting_at) as date,
      count(activities.id) as value
    ") \
    .within(latMin, lngMin, latMax, lngMax) \
    .joins(:activities) \
    .merge(Activity.in_week(date)) \
    .group("date") \
    .order("date")
  }

inside 方法检查范围,Activity.in_week 范围返回以下内容:

where("activities.starting_at >= ? AND activities.starting_at < ?", start, stop)

在 select 语句中,我想将starting_at 字段截断为day。

我得到日期字段的以下输出:

2011-04-07 18:48:32
2011-04-02 14:07:20
2011-04-02 14:06:49

不幸的是它不包括时区。当我尝试通过“正常”Rails 函数访问我的模型时,它可以工作:

puts Activity.first.starting_at
-> 2011-04-15 06:47:55 +0200

我做错了什么?希望有人可以帮忙!

thx, tux


您的数据库正在以 UTC 格式存储时间戳(理应如此)。当 ActiveRecord 知道它有时间戳时,它就会进行时区调整;所以,当你这样说时:

puts Activity.first.starting_at

AR 知道starting_at是一个时间戳,因此它将时间戳实例化为ActiveSupport::TimeWithZone http://apidock.com/rails/ActiveSupport/TimeWithZone实例并且该类应用时区调整。但是,当你这样说时:

select("date_trunc('day', activities.starting_at) as date ...

AR 不会解析 SQL 来弄清楚这一点date_trunc会返回一个时间戳,AR甚至不知道是什么date_trunc方法。 AR 只会看到从数据库中出来的一个字符串,它会直接将其交给您而不进行解释。您可以随意将该字符串提供给ActiveSupport::TimeWithZone(或者你最喜欢的时间处理课程)你自己:告诉 AR 自己不知道也不可能知道的事情并没有什么错。

Rails 很聪明,但它并不神奇。

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

Rails 不转换时区 (PostgreSQL) 的相关文章

  • Postgres 在并发更新插入时出现死锁

    我们有一个从数据流中读取信息并将该信息更新到数据库中的应用程序 数据是 Google Drive 上发生的变化 这意味着影响相同对象的许多事件可能会非常接近地发生 将此信息更新插入数据库时 我们遇到了死锁 日志中显示的内容如下 我已经重建并
  • 在设计电子邮件主题中添加动态价值

    好吧 我看过很多关于自定义设计电子邮件主题的讨论 但似乎没有一个能解决我想要的问题 目前我的确认电子邮件主题为 确认您的 Qitch com 帐户 我想自定义此电子邮件主题并在其中添加用户名的动态值 这样如果用户ALEX注册一个帐户 他应该
  • 将表单作为本地表单传递给 Rails 5 中渲染的部分 ajax

    我已经查遍了 找不到有效的解决方案 相关控制器 profits controller rb def new tabs market Market order mjsnumber all first profit Profit new pro
  • Django 全文搜索优化 - Postgres

    我正在尝试利用 Django v2 1 和 Postgres 9 5 创建一个地址自动完成功能的全文搜索 但性能目前不适合自动完成 我不明白逻辑我得到的绩效结果背后 就信息而言 该表相当大 有 1400 万行 我的型号 from djang
  • Stripe Connect - 检索访问令牌

    我正在尝试为 Rails 3 2 13 应用程序设置 Stripe Connect 我已将用户引导至 Stripe 并收到了来自 Stripe 的授权码 HTTP 1 1 302 Found Location http localhost
  • Postgres 重叠数组中的一列

    我有一个表 A 其中有一列 col1 其中每个记录都是整数数组 col1 1 2 3 4 1 2 6 7 1 2 3 8 9 我喜欢有一行作为结果 其中包含 col1 中所有数组的重叠或相交 select overlap col1 from
  • 将 Sprockets 的“depend_on”指令指向非资产文件

    我有一个app assets javascripts moufa js erb填充来自 a 的值的文件config moufa yml文件 我想使用depend onsprockets 指令 以便每次 yaml 文件发生更改时 它都会重新编
  • 在 Postgres 中以周为单位分割间隔

    这是另一个关于日期的 SQL 问题 我正在使用 PHP 和 Postgres 构建一个日历应用程序 它将显示几天 几周甚至几个月的事件 每个事件都有开始日期和结束日期 按范围选择它们不是问题 然而 如果 Postgres 可以在每周的第一天
  • Rails:如何测试 lib/ 目录中的代码?

    我有一个从解析器对象获取数据的模型 我认为解析器类应该位于 lib 目录中 尽管我可以说服它应该位于其他地方 问题是 解析器类的单元测试应该在哪里 如何确保每次运行 rake 测试时都运行它们 在我正在开发的 Rails 应用程序中 我决定
  • rspec 不适用于设计用户身份验证

    我正在尝试使用 RSpec 来测试我的 Rails 应用程序 该应用程序使用设计用户身份验证 gem 以下是已捆绑的相关 gem 的列表 devise 3 4 1 rails 4 1 7 4 1 6 rspec 3 1 0 rspec co
  • 回形针回调还是简单的处理器?

    我想运行回调after post process但它似乎无法在使用 Paperclip 2 3 8 的 Rails 3 0 1 中工作 它给出了一个错误 undefined method post process callbacks for
  • 如何检查 postgres 的 psql 是否自动提交

    我使用的是 postgres 9 5 如何检查自动提交是否打开或关闭 我试过SHOW AUTOCOMMIT我在哪里得到的ERROR unrecognized configuration parameter autocommit 然后我做了一
  • 机架 1.3.2 的问题。您已经激活了机架 1.3.2,但您的 Gemfile 需要机架 1.2.3

    我在 Debian 上有 Passenger 3 0 9 带有 Gem Rack 1 3 2 和 1 2 1 使用带有乘客 e 捆绑器的 Rails 3 0 应用程序 我遇到以下错误 您已经激活了机架 1 3 2 但您的 Gemfile 需
  • has_many 关系的动态 class_name

    我正在尝试与动态 class name 属性建立 has many 关系 class Category lt ActiveRecord Base has many ads class name gt lambda return self i
  • Postgres UUID 和休眠

    我有一个具有 UUID 列的实体 它不是主键 我正在使用 Postgres 和 hibernate 我对此专栏的类型是https www postgresql org docs 9 1 static datatype uuid html h
  • 您将如何整理这个控制器逻辑?

    我在控制器中有一些逻辑 如果满足某些条件 它会设置对象的状态 if params concept consulted legal 0 params concept consulted marketing 1 concept attribut
  • PostgreSQL 中的 LATERAL JOIN 和子查询有什么区别?

    自从 PostgreSQL 推出以来 它具备了以下功能 LATERAL连接 我一直在阅读它 因为我目前为我的团队进行复杂的数据转储 其中有许多低效的子查询 使整个查询需要四分钟或更长时间 我明白那个LATERALjoins 可能可以帮助我
  • 如果数组重叠,则折叠多行数组

    我在 PostgreSQL 9 3 中有一个表 其中包含一个列 每行包含一个数组 我正在努力寻找崩溃的方法 共享相同元素的数组行 Examples 简单重叠 给定以下两行数组 1 2 3 5 3 6 9 结果将是一行包含 5 1 2 3 6
  • Rails 3 UJS 干客户端 + 服务器端表单验证

    使用 jQuery 进行表单验证就像向字段添加类名一样简单 使用 Rails 进行表单验证就像将条件放入控制器 和 或模型 中一样简单 我认为应该有一种方法可以编写一次验证并将它们应用到客户端和服务器端 我一直热衷于编写自己的 javasc
  • ruby 调试和黄瓜

    我在 Cucumber 中遇到了失败的情况 我想使用 ruby debug 来调试我的 Rails 控制器 但是 如果我将 调试器 添加到我想要中断的位置 它就不会停止 我尝试将 ruby debug 和 ruby gems 的 requi

随机推荐