我环顾四周,看不出为什么我的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实现这一目标的最佳和最短路径是什么?它似乎陷入时间方面......
答案 0 :(得分: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)
}