0

我試圖讓下面的語句工作,Ruby on Rails的選擇了日期範圍

User.all.select{ |user| user.created_at === DateTime.yesterday..DateTime.today } 

User.all.select{ |user| user.created_at == DateTime.yesterday..DateTime.today } 

User.all.select{ |user| user.created_at => DateTime.yesterday..DateTime.today } 

,這並不工作,並提示一個錯誤bad value for range

據我所知,有更有效的方式來做到這一點,並得到相同的結果了,但是我感興趣的是如何獲得選擇工作,日期範圍

+0

請意識到,調用'''all.select'''將從數據庫中檢索所有用戶,然後從內存中選擇它們。很難想象任何情況下這是一個好主意。 –

+0

@TimScott優秀的觀察,但如上所述,這僅僅是爲了解釋的目的,謝謝 –

回答

2
range = (DateTime.yesterday..DateTime.now) 
User.all.select { |user| range.cover?(user.created_at) } 
2

既然你在Rails 3中,你可以這樣做:

User.find(:all, :conditions => {:created_at => DateTime.yesterday.. DateTime.today}) 

注意然而,這已被棄用此:

User.where(:created_at => DateTime.yesterday..DateTime.today) 
+0

非常感謝,但正如我所說的,只想'有趣',想知道如何用select方法做到這一點。乾杯! –

+1

夠公平的,但如果那是你認爲「有趣」的那種,你真的應該多出去。 – Vidya