搜索在特定日期创建的数据库对象?

时间:2013-11-01 19:10:27

标签: sql ruby-on-rails ruby-on-rails-3 activerecord

我想查询我的数据库中某天创建的任意模型的对象,这样做的好方法是什么?

在sql查询中,我使用以下内容查询昨天创建的对象。

其中(created_at AT TIME ZONE'EDT')> (现在()AT TIME ZONE'EDT'):: DATE - 1   和(在时区'EDT'创建时)< (现在()AT TIME ZONE'EDT'):: DATE

我想在使用ActiveRecord调用的ruby中做同样的事情。

谢谢!

2 个答案:

答案 0 :(得分:3)

作为范围的示例,适用于今天创建的所有项目:

scope :created_today, -> { where('created_at between ? AND ?', Time.zone.now.beginning_of_day, Time.zone.now.end_of_day) }

PostgreSQL site

的更多信息

答案 1 :(得分:-1)

我会对数据库进行强制转换并选择当前日期,而不是使用范围进行。您可以使用DATE(created_at)(将导致“2013-11-01”)执行此操作然后在以下位置注入参数:

Model.where("DATE(created_at) = ?", Date.today)

如果它在更多的地方使用,那么按照Morner的建议创建一个范围会很好:

scope :created_today { where("DATE(created_at) = ?", Date.today) }

名称:

scope :created_today_with_name lambda do |name| 
  where("DATE(created_at) = ? AND name = ?", Date.today, name)
end

或链接它:

scope :created_today_with_name lambda do |name| 
  where("DATE(created_at) = ?", Date.today).where(name: name)
end

然后将其称为:

Model.created_today_with_name('Joe')