2011-10-21 36 views
1

我有一个表单,用户将选择一个日期范围,然后根据该日期范围显示报表。通过表单中的日期

我的Rails形式的相关位看起来像这样...

<div class="field"> 
<b>Start Date</b><br /> 
<%= date_select :startDate, options = {:order => [:day, :month, :year]} %> 
</div> 

<div class="field"> 
<b>End Date</b><br /> 
<%= date_select :endDate, options = {:order => [:day, :month, :year]} %> 
</div> 

不过,我无法找出如何访问生成日期在控制器中。我把下面的诊断控制器,

puts params[:startDate] 
puts params[:endDate] 
puts Date.today 

......这说明,

orderdaymonthyear(1i)2011orderdaymonthyear(2i)3orderdaymonthyear(3i)21 
orderdaymonthyear(1i)2011orderdaymonthyear(2i)10orderdaymonthyear(3i)21 
2011-10-21 

我的搜索,是指在如下,

SalesActivity.find(:全部,:conditions => {:created_at => params [:startDate] .. params [:endDate]})

...这给出了例外'范围的错误值'。

指导如何通过和使用日期范围,将不胜感激。

回答

3

感谢有帮助的建议答案,我了解到我需要挖掘的领域是多参数属性。然而,Julik引用的答案似乎比我需要的更复杂。

然而,我发现这一点,

http://snippets.dzone.com/posts/show/4630

这给了我什么,我一直在寻找这样,我的[现在的工作]代码看起来像这样,再次

@start_date = Date.civil(params[:range][:"startDate(1i)"].to_i, 
         params[:range][:"startDate(2i)"].to_i, 
         params[:range][:"startDate(3i)"].to_i) 

@end_date = Date.civil(params[:range][:"endDate(1i)"].to_i, 
         params[:range][:"endDate(2i)"].to_i, 
         params[:range][:"endDate(3i)"].to_i) 

感谢帮助。

0
Try SalesActivity.all.where("created_at > ? AND created_at < ?", params[:startDate], params[:endDate]) 
+0

感谢您的建议,但不幸的是它没有解决问题。 – Snips

2

This answer解释了这些参数是什么以及它们的结构。 AFAIK现在Rails没有提供一种简单的方法来为任意对象添加多参数分配支持(这是你在这种情况下所需要的)。

+0

我已经upvoted这个有用的答复,因为它解释了问题是multiparameter属性。不过,我找到了一个更简洁的解决方案,我已经发布了一个单独的答案。谢谢你的帮助。 – Snips

0

从技术上讲,这不是对您的具体问题的答案,但它是解决您的问题的方法。

你有没有考虑过使用日期选择javascript日历助手?因此,在用户界面中,用户必须从6个下拉列表中进行选择。他们可以更简单地从2个日历实例中选择2个。然后,您将以字符串的形式获取开始日期和结束日期的值。