2012-01-05 85 views
2

我們的應用程序有一個lease_booking模型,其中有一個數據時間爲lease_date的字段(我們使用sqlite for development和mysql for production)。該應用需要查找給定日期的所有lease_booking。代碼如下:如何比較rails 3.1中日期時間字段的日期部分?

LeaseBooking.where("lease_date == ?", '2012-1-5') 

的問題是,我們找不到任何2012/1/5因爲lease_booking的lease_date是日期+時間格式。應用程序如何僅比較rails 3.1中的datatime字段的日期部分?

謝謝。

回答

3

或者,試試這個:

scope :booking_date, lamda {|d| where('lease_date > ?', Date.parse(d).to_time).where('lease_date < ?', (Date.parse(d) +1).to_time)} 

並調用

LeaseBooking.booking_date('2012-01-05') 

where -chaining是醜陋的,但你是否能使用多個?佔位符,或命名變量,做它在一個聲明中是高度依賴DB的。不過,ARel很擅長將醜陋的鏈式查詢變成高效的SQL。

4

恐怕你不得不做的事:

LeaseBooking.where("date(lease_date) = ?", '2012-1-5') 

(只有一個=號)

也許有一個更好的答案,因爲呼叫「約會」功能是不是真的漂亮的ActiveRecord!就像傑森劉易斯在評論中所說的那樣,它是針對數據庫的。

+0

它是特定於數據庫的,但是您可能必須在數據庫端強制使用日期,因爲如果將「2012-1-5」強制轉換爲日期時間或時間,它只會在UTC或本地午夜的時間匹配該日期時間,分別。 – 2012-01-05 21:54:49

+0

謝謝。我們只使用SQLite和MySQL並且都支持date(),所以它可以工作。 – user938363 2012-01-05 23:07:23