2013-07-03 24 views
2

我想弄清楚如何做一個查詢,其中created_at.year ==給定年份,created_at.month等於給定的月份。Rails其中Created_at等於具體數字

但是我無法弄清楚我做錯了什麼。

Model.where("'created_at.month' = ? AND 'created_at.year' = ?", 7,2013)

結果沒有被顯示。

但是,當我嘗試Model.first.created_at.month ==7Model.first.created_at.year ==2013我對兩者都成立。

因此理論上我的查詢應至少返回我的第一條記錄。

任何人都知道我在做什麼錯誤或以其他方式查找在特定月份創建的記錄?

請注意,在我的看法中,月/年將是參數,但爲了本示例的目的,我使用了實際值。

使用紅寶石1.9.3 導軌3.2.13

回答

2

created_at是時間戳;它不是數據庫中的一組離散字段。 created_at.year等你的數據庫中不存在;它只是一個時間戳字段。當您致電@model.created_at.year時,Rails將從數據庫加載created_at字段,並從中創建一個Time對象,該對象具有可調用的#year方法。

你想要的是在一系列日期查詢:

Model.where("created_at >= ? and created_at < ?", Time.mktime(2013, 7), Time.mktime(2013, 8)) 

這將找到一個created_at時間戳的任何型號七月2013年

2

可以使用extract SQL功能,這將提取時間戳的月份和年份:

Model.where('extract(year from created_at) = ? and extract(month from created_at) = ?', '2013','7') 

此查詢應爲您提供期望的結果。