我有以下固定装置:
link_1:
user: tom
image: boy1
created_at: <%= 5.day.ago %>我尝试了以下请求:
Links.where("Date(created_at) = ?", 5.day.ago.to_date)答案:
[]grrrr....typing...typing...scratching...我终于试过了:
link_1:
user: tom
image: boy1
created_at: <%= 5.day.ago.to_date %>和
Links.where("Date(created_at) = ?", 5.day.ago.to_date)最终答案
[#<Link id: 298486374, user_id: 1038054164, image_id: 482586125, created_at: "2010-11-28 00:00:00", updated_at: "2010-12-03 21:32:19">]这是我所期望的,但是为什么我需要把to_date放在?这对我来说是不清楚的,因为当我创建一个对象而没有指定创建日期时,我可以用下面的where子句选择它们而不会出现问题:
Links.where("Date(created_at) = ?", Date.today)有什么想法吗?
发布于 2010-12-04 05:55:06
在灯具中,您应该具备:
created_at: <%= 5.day.ago.to_s(:db) %>您的查询将是:
Links.where("created_at = ?", ...让ActiveRecord来处理将数据从数据库移出和移入数据库的细节。我们使用ORM是有原因的。
Reference。
发布于 2010-12-04 05:45:00
我推测这是因为创建fixture和调用查询之间的时间差。
5天前+ 0.00025毫秒>5天前
我不确定datetimes的精度是多少,但这是我能想到的唯一可能性。当您将其转换为日期时,删除了无关的时间信息并使两者相等。
发布于 2014-08-28 18:49:47
created_at是一个DateTime字段,5.days.ago实际上返回一个DateTime对象。这个对象将具有与它被调用时相同的时间设置,例如。星期六,2014年8月23日10:30:37,这是放入数据库的内容。
在失败的情况下,当您稍后再次调用5.days.ago时(即使在相同的执行中),新的时间可能会有所不同,例如。2014年8月23日星期六10:30:38。因此,您可以看到它们不相等,并且您将不会得到任何匹配。
当您追加.to_date时,您将获得一个Date对象,该对象没有时间部分。当它被持久化到数据库中,或者在您的查询中使用时,它将始终被视为时间为00:00:00 (午夜)。因此,日期和时间将匹配(只要您不尝试运行fixture并在午夜之后进行查询)
https://stackoverflow.com/questions/4350127
复制相似问题