2016-06-14 175 views
1

在我的rails項目中,有一個搜索頁面,其中包含日期範圍值由( - )分隔的下拉列表。下拉的選項是這樣的:Rails:按月份和年份查詢ActiveRecord

Jan,2014 - March,2014 
April,2014 - Jun,2014 
.... 
Oct,2014 - Dec,2014 

用戶可以選擇這些日期範圍中的一個並且只有那些記錄將表明,落入指定日期範圍內。要過濾的字段是start_date,其中是時間戳字段。

所以我想是這樣的:

filter = params[:filter].split("-") 
@posts = Post.where(start_date: filter[0]..filter[1]) 

但在PARAMS我只得到月份和年份。我如何分析這些值以便上述查詢有效?

回答

4

嘿,你可以嘗試使用Date.strptime

filter = params[:filter].split(" - ") 

字符串轉換爲日期使用strptime

st_date = Date.strptime(filter[0],"%B,%Y") 
end_date = Date.strptime(filter[1],"%B,%Y") 

解析字符串到日期爲正月開始到第二個月

年底創建日期範圍
date_range = st_date.beginning_of_month..end_date.end_of_month 

@posts = Post.where(:start_date => date_range) 
+0

謝謝。 end_date出現錯誤,所以我按(「 - 」)而不是(「 - 」)分割它 – Arif

+0

@Arif您可以根據字符串格式管理它 –

+0

是的,它調整了謝謝。有額外的空間。謝謝 – Arif