2014-10-07 100 views
1

我遇到了麻煩的最佳方式,但基本上我有一個博客,我想顯示所有已發佈博客的月份和年份的存檔。點擊一個鏈接「2012年5月」將會帶給你同一個月中的所有博客(例如:2012年5月5日,2012年5月20日...)。有沒有辦法在同一年的同一個月內使用created_at並傳遞數字月份和年份的參數來獲取所有記錄?有沒有更好的方法來做到這一點。Rails 4查詢按月份和年份排序

回答

4

嘗試這樣的事情在你的控制器:

month = Date.new(params[:year], params[:month]) 
@entries = Blog.where(created_at: month.all_month) 

#all_month方法將創建一個包含範圍該月的開始和結束,並在where子句中傳遞Range以使該日期的BETWEEN查詢成爲可能。

+0

Rails 4.1中的all_month是否是新的? – tadman 2014-10-07 15:48:44

+0

只是在軌道4.1.4和它的工作原理,最簡潔的答案 – 2014-10-07 15:50:19

+0

它在3.2和4.0的'時間'類,所以也許它移動了一下。 – 2014-10-07 15:51:42

1

是的,你可以做到這一點Rails中,例如,對於所有的博客在2014年5月:

time = DateTime.new(2014,5) 
blogs = Blog.where("created_at >= ? and created_at <= ? ", time.beginning_of_month, time.end_of_month) 
+1

這應該是'BETWEEN? AND?'因爲我認爲你用這個'<'比較跳過了最後一天。 – tadman 2014-10-07 15:49:35

+0

你說得對。它應該<=而不是 – 2014-10-07 15:51:42