Rails Dates Time和Fixtures

sta*_*p75 11 activerecord ruby-on-rails fixtures

我有以下夹具:

link_1:
  user: tom
  image: boy1
  created_at: <%= 5.day.ago %>
Run Code Online (Sandbox Code Playgroud)

我尝试了以下请求:

Links.where("Date(created_at) = ?", 5.day.ago.to_date)
Run Code Online (Sandbox Code Playgroud)

回答:

[]
Run Code Online (Sandbox Code Playgroud)

grrrr ....打字......打字......抓...我终于试过了:

link_1:
  user: tom
  image: boy1
  created_at: <%= 5.day.ago.to_date %>
Run Code Online (Sandbox Code Playgroud)

Links.where("Date(created_at) = ?", 5.day.ago.to_date)
Run Code Online (Sandbox Code Playgroud)

终于答案了

[#<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">]
Run Code Online (Sandbox Code Playgroud)

我期待什么,但为什么我需要把to_date?我不清楚,因为当我创建一个没有指定创建日期的对象时,我可以使用以下where子句选择它们而不会出现问题:

Links.where("Date(created_at) = ?", Date.today)
Run Code Online (Sandbox Code Playgroud)

任何的想法?

lbz*_*lbz 20

在灯具中你应该:

created_at: <%= 5.day.ago.to_s(:db) %>
Run Code Online (Sandbox Code Playgroud)

您的查询将是:

Links.where("created_at = ?", ...
Run Code Online (Sandbox Code Playgroud)

让ActiveRecord处理有关从数据库移动数据和向数据库移动数据的详细信息.我们使用ORM是有原因的.

参考.


Chu*_*ebs 1

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

5 天前 + 0.00025 毫秒 > 5 天前

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