我有一个表单,用户可以选择日期范围,然后根据该日期范围显示报告。
我的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(:all,:conditions =&gt; {:created_at =&gt; params [:startDate] .. params [:endDate]})
...这给出了例外,“范围的不良价值”。
如何传递和使用日期范围的指示将不胜感激。
答案 0 :(得分: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)
再次感谢您的帮助。
答案 1 :(得分:2)
This answer解释了这些参数是什么以及它们的结构。 AFAIK现在Rails没有提供一种简单的方法来为任意对象添加多参数赋值支持(在这种情况下你会想要这样)。
答案 2 :(得分:0)
Try SalesActivity.all.where("created_at > ? AND created_at < ?", params[:startDate], params[:endDate])
答案 3 :(得分:0)
从技术上讲,这不是您具体问题的答案,但它可以解决您的问题。
您是否考虑过使用日期选择javascript日历助手?因此,在您的用户界面中,您的用户必须从6个下拉列表中进行选择。他们从2个日历实例中选择2可能更简单。然后,您将获得开始日期和结束日期的值作为字符串。