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 に答える