Reputation: 6773
I have a form where the user will select a date range, and then a report will be presented based on that date range.
The relevant bit of my Rails form looks like this...
<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>
However, I'm having trouble figuring out how to access the resulting dates in the controller. I've put the following diagnostics in the controller,
puts params[:startDate]
puts params[:endDate]
puts Date.today
...and this shows,
orderdaymonthyear(1i)2011orderdaymonthyear(2i)3orderdaymonthyear(3i)21
orderdaymonthyear(1i)2011orderdaymonthyear(2i)10orderdaymonthyear(3i)21
2011-10-21
My search, is defined at follows,
SalesActivity.find(:all, :conditions => {:created_at => params[:startDate]..params[:endDate]})
...and this gives the exception, 'bad value for range'.
Pointers to how to pass and use a Date range would be appreciated.
Upvotes: 1
Views: 1684
Reputation: 6773
Thanks to the helpful suggested answers, I learned that the area I needed to dig into was multiparameter attributes. However, the answer referenced by Julik seems more complex than what I need.
However, I did find this,
http://snippets.dzone.com/posts/show/4630
Which gave me what I was looking for so, my [now working] code looks like this,
@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)
Thanks again for the help.
Upvotes: 3
Reputation: 13433
Technically this is not an answer to your specific question, but it is a solution to your problem.
Have you considered using a date select javascript calendar helper? As such in your user interface your user has to select from 6 drop down lists. It may be simpler for them to select 2 from 2 calendar instances. You will then get the value for start date and end date as strings.
Upvotes: 0
Reputation: 7856
This answer explains what these parameters are and how they are structured. AFAIK for now Rails does not offer an easy way to add multiparameter assignment support to an arbitrary object (which is what you would want in this case).
Upvotes: 2
Reputation: 4113
Try SalesActivity.all.where("created_at > ? AND created_at < ?", params[:startDate], params[:endDate])
Upvotes: 0