2008-09-26 130 views
20

如何在用戶選擇的日期範圍內生成報告?什麼是最好的日期範圍選擇器?在導航欄中生成日期範圍報告

編輯迴應帕特里克:我正在尋找一些小部件和活動記錄建議,但我真正好奇的是如何基於用戶選擇的日期安靜地顯示日期範圍列表。

回答

30

我們在這裏問一個接口問題(即你想要一個小部件)還是一個ActiveRecord問題?

日期採摘小部件

1)默認的Rails解:請參閱date_select文檔here。使用插件:爲什麼要編寫代碼?我個人喜歡CalendarDateSelect插件,當我需要一個範圍時使用一對吸盤。

3)適應一個Javascript窗口小部件到Rails:這幾乎是微不足道的東西,如雅虎UI庫(YUI)Calendar,這是所有JavaScript,以便Rails的整合。從Rails的角度來看,它只是填充params[:start_date]params[:end_date]的另一種方式。 YUI日曆支持範圍的本地支持。

從窗口小部件

1)獲取數據默認的Rails解參見date_select文檔here

#an application helper method you'll find helpful 
#credit to http://blog.zerosum.org/2007/5/9/deconstructing-date_select 

# Reconstruct a date object from date_select helper form params 
def build_date_from_params(field_name, params) 
    Date.new(params["#{field_name.to_s}(1i)"].to_i, 
     params["#{field_name.to_s}(2i)"].to_i, 
     params["#{field_name.to_s}(3i)"].to_i) 
end 

#goes into view 
<%= date_select "report", "start_date", ... %> 
<%= date_select "report", "end_date", ... %>  

#goes into controller -- add your own error handling/defaults, please! 
report_start_date = build_date_from_params("start_date", params[:report]) 
report_end_date = build_date_from_params("end_date", params[:report])  

2)CalendarDateSelect:與其與上述類似,只是與性感可見UI。

3)適應Javascript小部件:通常這意味着某些表單元素將日期輸入作爲字符串。對你來說是個好消息,因爲Date.parse是一些非常神奇的東西。 params [:some_form_element_name]將由Rails爲您初始化。

#goes in controller. Please handle errors yourself -- Javascript != trusted input. 
report_start_date = Date.parse(params[:report_start_date]) 

編寫調用ActiveRecord的

容易餡餅。

#initialize start_date and end_date up here, by pulling from params probably 
    @models = SomeModel.find(:all, :conditions => ['date >= ? and date <= ?', 
    start_date, end_date]) 
    #do something with models 
+0

兩個小部件和活動記錄但有一點我真的很好奇的是如何以REST風格顯示範圍的日期列表根據用戶選擇的日期。具體而言,如何最好地將用戶的輸入轉化爲活動記錄查找。 – srboisvert 2008-09-26 11:48:32

2

讓URL參數控制所選記錄的範圍並不是一種不太經驗的做法。在你的索引操作,你可以做什麼帕特里克建議,並有這樣的:

#initialize start_date and end_date up here, by pulling from params probably 
    @models = SomeModel.find(:all, :conditions => ['date >= ? and date <= ?', params[:start_date], params[:end_date]]) 

然後在你的索引視圖中創建一個表單上的起始日期= 2008-01-01 & END_DATE = 2008-12-31釘子?到URL。請記住它是用戶提供的輸入,所以要小心。如果你把它放回你的索引操作在屏幕上,一定要做到這樣的:

Showing records starting on 
<%= h start_date %> 
and ending on 
<%= h end_date %>