任何人都可以解释一下,为什么我的数据库查询返回空,当我的表中有数据时?
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 []>
一切都在哪里?
答案 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:属性(假设它是在迁移时间戳中创建的)也存储时间。所以它永远不会等于一个简单的日期。您最好的选择是解析日期然后进行比较。