0

我环顾四周,看不出我的 Date.yesterday 查询不起作用的任何原因。

我的模型中有这个:

  scope :yesterday, lambda {
    where('acctstarttime = ?', Time.now - 1.day)
  }

我试过了

 scope :yesterday, lambda {
   where('acctstarttime = ?', (Time.now - 1.day).strftime('%Y-%m-%d'))
 }

和...

scope :yesterday, lambda {
   where('acctstarttime = ?', Date.yesterday)
 }

我得到这样的结果:

 Radacct.yesterday.count
 (440.1ms)  SELECT COUNT(*) FROM `radacct` WHERE (acctstarttime like '2013-01-27 22:55:31')

(我也试过 Date.yesterday)

在哪里使用今天产生:

 Radacct.today.count
 SELECT COUNT(*) FROM `radacct` WHERE (acctstarttime >= '2013-01-28')
 => 16,456

如果我按如下方式修改查找,它将起作用:

 Radacct.find(:all, :conditions => ["acctstarttime like ?", (Date.today-1).strftime('%Y-%m-%d')+ "%"]).count

我只是累了还是这太复杂了?Rails 3 中实现这一目标的最佳和最短方法是什么?它似乎被时间方面卡住了..

4

1 回答 1

2

注意 '>=' 上的today。问题是您正在测试与昨天的相等性,而您真正想要测试的是一个范围。试试这个:

scope :yesterday, lambda {
  where(:acctstarttime => Date.yesterday.beginning_of_day..Date.yesterday.end_of_day)
}

或者

scope :yesterday, lambda {
  where('acctstarttime >= ? && acctstarttime <= ?', Date.yesterday, Date.today)
}
于 2013-01-28T23:10:53.680 回答