2011-10-21 13 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が参照する答えは、私が必要とするよりも複雑に思えます。

しかし、私はのために

@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) 

おかげで再び、私の[今働い]のコードは次のようになり、私を与えた

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

が、私はそう探していたものを、これを見つけました手伝い。

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

提案していただきありがとうございますが、残念ながら問題は解決しませんでした。 – Snips

2

This answerは、これらのパラメータとその構成方法を説明しています。 AFAIK for Railsは、任意のオブジェクト(これはあなたが望むもの)にマルチパラメータ割り当てサポートを追加する簡単な方法を提供していません。

+0

私は、この問題がマルチパラメータ属性であることを説明しているので、この有益な回答をupvotedしました。しかし、私は別の答えとして投稿したより簡潔な解決策を見つけました。ご協力いただきありがとうございます。 – Snips

0

技術的には、これは特定の質問に対する回答ではありませんが、問題の解決方法です。

日付選択JavaScriptのカレンダーヘルパーを使用することを検討しましたか?あなたのユーザーインターフェイスでは、ユーザーは6つのドロップダウンリストから選択する必要があります。カレンダーの2つのインスタンスから2つを選択する方が簡単かもしれません。開始日と終了日の値を文字列として取得します。

関連する問題