2008-09-26 43 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 %>