【发布时间】:2012-07-13 20:17:59
【问题描述】:
我正在尝试选择 SQLite 数据库中具有未来日期的所有记录。
Record.where('scheduled_date > ?', Time.now)
在我的计算机上,这当前返回一个空数组。
但是,如果我使用以下内容:
Record.all.map { |record| record if record.scheduled_date > Time.now }
我收到一个包含未来日期的所有记录的数组。
此外,我的同事在他的机器上运行相同的 Rails 项目,能够使用 ActiveRecord 查询成功返回预期的结果数组。在最近取消我对项目的更改后,此查询对他不起作用,他的计算机表现得和我的一样。
我怀疑这个 Rails 项目中的 SQLite (v. 1.3.6) 或 Rails3 (v. 3.2.3) 可能存在环境问题,不知道该去哪里找。有什么想法可能导致这种情况吗?
【问题讨论】:
-
这可能是 UTC 问题。当您通过 Ruby Record.all.map 加载时,记录日期已经转换为 UTC。但是在 where 子句中 Time.now 是当地时间。如果你使用 Time.now.iso8601 会得到什么?
-
谢谢peterept,Time.now.iso8601 解决了这个问题!
标签: ruby-on-rails ruby sqlite datetime activerecord