2011-08-19 62 views
1

我有一個簡單的rails應用程序,就像一個事件系統,它有一個start_at字段和一個end_at字段。我希望能夠顯示在當前月份爲start_at個月的事件。我定義了一個範圍如下所示:如何使用ActiveRecord查找日期在當前月份內的記錄?

scope :this_months_event, lamda{where("start_at = ?" Time.zone.now.month)} 

每當我在控制檯窗口中試用這個,我得到一個空的數組。我觀察到start_at字段的月份沒有被提取,所以它找不到start_at月份,所以它會返回空。

有誰知道一個好辦法做到這一點還是我怎麼能傳遞start_at個月這樣,當我打電話Event.this_months_event,我得到這個目前每月的所有事件,如果可能的一個範圍,以獲取過去的事件,另一個用來取目前的事件。

回答

12

你的情況說,start_at應Time.zone.now.month,其中,作爲這個寫作是8.您想與該月的開頭和結尾start_at比較準確的值:

scope :this_months_event, lambda { where("start_at >= ? AND start_at <= ?", 
    Time.zone.now.beginning_of_month, Time.zone.now.end_of_month) } 
+0

您將需要一個'lambda'有,否則你的代碼可能會產生意外行爲在生產,其中類緩存。 – rubish

+0

謝謝。編輯我的答案。 –

+0

非常感謝這幫助很好 – Uchenna

0

我認爲start_atend_at是約會時間?如果是這樣,你需要稍微複雜一些的做一些事情:

scope :this_months_event, lambda { where("EXTRACT(MONTH FROM start_at)) = ?", Time.zone.now.month) } 

http://www.postgresql.org/docs/9.0/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT

+1

不錯,不知道關於提取月份,但是......這個範圍會發現在同一個日曆月中來自以前(和未來)的事件。 –

+0

你的'FROM'就像一個postgresql,但是對於sqlite來說。因爲我只是試了一下,它不適用於sqlite – Uchenna

+1

是的,這段代碼既不正確也不便攜,但EXTRACT的東西可能非常有用。 –

相關問題