我试图在模型中搜索等于特定日期的任何日期,同时忽略时间戳。在 Rails 中我可以简单地执行它DateTime.to_date == somedate
,但是我认为在 SQL 中制定起来并不那么容易,因为我无法将 to_date 方法应用于整个列,如created_at:
Foo.where("created_at == some_day_without_time_stamp").count
最初,我认为因为我使用的是 postgresql 数据库,所以我可以简单地使用 psql 语法,但我更愿意将其留给 ActiveRecord 来决定哪种 sql 最适用,并使我的代码与数据库供应商无关。无需任何额外的插件或宝石就可以实现这一点吗?
我会做类似的事情...
someday = Date.today
Foo.where( :created_at => (someday)..(someday + 1.day) )
这将捕获所有created_at
午夜之间的日期someday
and someday + 1
。这是包容性的(因此它将包括在 +1 天的午夜创建的 Foo),但可能“足够好”满足您的需求,而不会弄乱时间戳。
为了美观起见,我会将其包装为scope
scope :on_day, ( lambda do |someday|
where( :created_at => (someday)..(someday + 1.day) )
end )
So
Foo.on_day( Date.yesterday ).count
很好读。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)