首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails日期、时间和Fixtures

Rails日期、时间和Fixtures
EN

Stack Overflow用户
提问于 2010-12-04 05:42:46
回答 4查看 10.4K关注 0票数 12

我有以下固定装置:

代码语言:javascript
复制
link_1:
  user: tom
  image: boy1
  created_at: <%= 5.day.ago %>

我尝试了以下请求:

代码语言:javascript
复制
Links.where("Date(created_at) = ?", 5.day.ago.to_date)

答案:

代码语言:javascript
复制
[]

grrrr....typing...typing...scratching...我终于试过了:

代码语言:javascript
复制
link_1:
  user: tom
  image: boy1
  created_at: <%= 5.day.ago.to_date %>

代码语言:javascript
复制
Links.where("Date(created_at) = ?", 5.day.ago.to_date)

最终答案

代码语言:javascript
复制
[#<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子句选择它们而不会出现问题:

代码语言:javascript
复制
Links.where("Date(created_at) = ?", Date.today)

有什么想法吗?

EN

回答 4

Stack Overflow用户

发布于 2010-12-04 05:55:06

在灯具中,您应该具备:

代码语言:javascript
复制
created_at: <%= 5.day.ago.to_s(:db) %>

您的查询将是:

代码语言:javascript
复制
Links.where("created_at = ?", ...

让ActiveRecord来处理将数据从数据库移出和移入数据库的细节。我们使用ORM是有原因的。

Reference

票数 24
EN

Stack Overflow用户

发布于 2010-12-04 05:45:00

我推测这是因为创建fixture和调用查询之间的时间差。

5天前+ 0.00025毫秒>5天前

我不确定datetimes的精度是多少,但这是我能想到的唯一可能性。当您将其转换为日期时,删除了无关的时间信息并使两者相等。

票数 1
EN

Stack Overflow用户

发布于 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并在午夜之后进行查询)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4350127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档