从表单传递日期

时间:2011-10-21 12:13:09

标签: ruby-on-rails

我有一个表单,用户可以选择日期范围,然后根据该日期范围显示报告。

我的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]})

...这给出了例外,“范围的不良价值”。

如何传递和使用日期范围的指示将不胜感激。

4 个答案:

答案 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可能更简单。然后,您将获得开始日期和结束日期的值作为字符串。