【发布时间】:2013-09-07 02:16:28
【问题描述】:
我正在搜索用户模型中的记录。搜索属性from_date,to_date将用于根据created_at列搜索用户模型中的记录。
User model : (id, name, created_at)
我在数据库中有以下记录。
id, name, created_at
1 jd1 2013-09-04 18:01:57
2 jd2 2013-09-05 19:01:57
3 jd3 2013-09-05 23:01:57
当我搜索时,在 "2013-09-04".to_date(from_date) 和 "2013-09-05".to_date(to_date) 之间,只返回前两条记录。最后一个没有被退回。当我将 to_date 更改为“2013-09-06”时,最后一条记录正在显示。这是我使用的查询。
date_range = from_date ... to_date + 1.day
scope :by_date, ->(date_range) {where(created_at: date_range)}
User.by_date(date_range)
查询有什么问题?我认为它存在日光时区问题。
【问题讨论】:
-
您需要将 created_at 列转换为 Date,它实际上是 DateTime ;)
-
实际生成的 SQL 是什么?我的猜测是你在 Rails 和你的数据库之间遇到了时区转换。
-
@PhilipHallstrom 它产生以下 sql:SELECT
users.* FROMusersWHERE (users.created_at>= '2013-09-04' ANDusers.@ 987654329@ -
@PeterAlfvin 对不起,我更新了这个问题。它们属于 Date 类
-
@PeterAlfvin :在yoshiji指出之后我更新了sql。
标签: ruby-on-rails ruby ruby-on-rails-3.2