Rails - 正确的db查询返回空数组

时间:2013-08-01 13:50:03

标签: ruby-on-rails ruby database

任何人都可以解释一下,为什么我的数据库查询返回空,当我的表中有数据时?

Event.all

返回

...
Event Load (0.3ms)  SELECT "events".* FROM "events"
 => #<ActiveRecord::Relation [#<Event id: 1, created_at: "2013-08-01 12:27:36", updated_at: "2013-08-01 12:27:36"> 
...

虽然

Event.where(created_at: Date.today)

给了我

Event Load (0.3ms)  SELECT "events".* FROM "events" WHERE "events"."created_at" = '2013-08-01'
 => #<ActiveRecord::Relation []> 

一切都在哪里?

3 个答案:

答案 0 :(得分:3)

字段created_at 是日期时间,但您将其与日期进行比较(没时间)。 您需要将字段投射为日期才能获取今天创建的所有事件:

Event.where('CAST(events.created_at as DATE) = ?', Date.today)

注意: 语法可能会因您的数据库系统(PostGreSQL / MySQL等)而改变。

希望这有帮助!

有用的链接:

答案 1 :(得分:0)

如果查看实际查询 -

SELECT "events".* FROM "events" WHERE "events"."created_at" = '2013-08-01'

您正在寻找created_at 等于 2013-08-01的记录,但实际上,您要搜索的记录 - created_at字段等于2013-08-01 12:27:36

更改您的对帐单,以搜索包含 created_at

2013-08-01

答案 2 :(得分:0)

问题是created_at:属性(假设它是在迁移时间戳中创建的)也存储时间。所以它永远不会等于一个简单的日期。您最好的选择是解析日期然后进行比较。