2010年06月01日

Ruby on Rails date_select

date_selectとは?


railsの便利なformメソッドの中の一つで、
日付を表示する事が可能なメソッドです。
 ・日程
  


日 から
  


日 の間


こんな感じのものを簡単にかけます。
今回書く事は、これの使い方ではなくてパラメータの受け取りがおかしなことになったのでちょっと書いてみます。

環境


rails1.2.6

現象


通常このメソッドを使用すると下記のようなパラメータが渡ってきます。
Parameters: {"date"=>{"start_time(1i)"=>"2010", "start_time(2i)"=>"6", "start_time(3i)"=>"1", "end_time(1i)"=>"2011", "end_time(2i)"=>"6", "end_time(3i)"=>"1"}

これをparams[:date][:start_time(1i)]というふうにして取り出します。
ちょっと面倒ですけどね。

まぁこれはいいんですが、
ページネートを挟んだりした場合なぜかパラメータが
params[:date][:start_time(1i)]としても
start_time(1i)
なぜか上記の値が返ってきます。

dateの中身を見てみると
start_time(1i)2010start_time(2i)6start_time(3i)1end_time(1i)2011end_time(2i)6end_time(3i)1

こんなんなってました。

全部くっついちゃって意味わかんなくなってました。
ページネートのa hrefのURLのなかにパラメータあるんですが、その中身がまぁ上のやつのようにくっついてる訳ですね。

解決策?


問題を解決するにはページネートを解読しないとだめっぽいのですが、
その時は時間がなくて正規表現で無理矢理やっちゃいました。
/#{name}\(#{i}i\)(\d*)/

こんな感じの正規表現(nameとiは変数)で、$1を取得するようにむりやりやってとりあえずおわらせました。

他のメソッドを使うのも一つの手です。
options_for_selectを使用して、年度や日付をプルダウンで表示させて受取る様にすれば恐らく今回の現象は起きないでしょう。
ただし、閏年とか日付は月によって違うので、それを自分で作らなくてはならなくなります。

ちなみに今回の現象は、local(MacOS10.5)のdevelopmentやproductionで起動したときにはおこらず。
サーバのproduction(developmentはためしてない)で起動した時に発生しました。
なぁんか違いがあるんですかねぇ〜。

なにか知っている人いたらおしえてくださぁい。
posted by RicK at 15:12| Comment(0) | TrackBack(0) | 日記