我想在我的数据库中查询在某一天创建的任意模型的对象,有什么好方法呢?
在 sql 查询中,我使用以下内容查询昨天创建的对象。
其中 (created_at AT TIME ZONE 'EDT') > (now() AT TIME ZONE 'EDT')::DATE - 1 和 (created_at AT TIME ZONE 'EDT') < (now() AT TIME ZONE 'EDT'): :日期
我想用 ActiveRecord 调用在 ruby 中做同样的事情。
谢谢!
我想在我的数据库中查询在某一天创建的任意模型的对象,有什么好方法呢?
在 sql 查询中,我使用以下内容查询昨天创建的对象。
其中 (created_at AT TIME ZONE 'EDT') > (now() AT TIME ZONE 'EDT')::DATE - 1 和 (created_at AT TIME ZONE 'EDT') < (now() AT TIME ZONE 'EDT'): :日期
我想用 ActiveRecord 调用在 ruby 中做同样的事情。
谢谢!
一个示例,作为一个范围,适用于今天创建的所有项目:
scope :created_today, -> { where('created_at between ? AND ?', Time.zone.now.beginning_of_day, Time.zone.now.end_of_day) }
PostgreSQL 网站上的更多信息
我会在数据库上进行演员表并在那里选择当前日期,而不是使用范围进行。您可以使用 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')