date_selectでhidden値を設定したい時
date_selectを使用したフォームで確認画面を用意したい場面があり、確認画面ではhidden_fieldを使用して登録完了画面に進む実装をしてみたのですが上手く行きませんでした。その時にハマったことのメモになります。
date_selectで値を渡してhidden_fieldを使用した時に発生する問題
date_selectを使ってフォームを作成して、確認画面を挟んで登録完了画面に向かう際にhidden_fieldメソッドを使用すると、date_selectで渡した1988-8-17というDate型の値をbirthdayというパラメータで渡せると思いきや、birthday=>{1=>1988, 2=>8, 3=>17}と言う形式に変換されてしまいDate型として保存出来なくなり登録画面に遷移出来なくなりました。「もしかしたらdate_selectを使用すると確認画面を作成出来なくなるのでは?」とすら考えました。
date_selectのオプションを使用する
結論としてはdate_selectメソッドを使用したフォームで確認画面を用意する場合、hidden_fieldは使用せず、date_selectのdiscard_year、discard_month、discard_dayオプションを使用します。これらのオプションはそれぞれ年の選択ボックス、月のボックス、日にちのボックスを非表示にするオプションになります。つまり、これらのオプションをtrueにして有効にすることによってdate_selectのボックスは表示させず、値だけを完了画面に渡すことが可能になります。もちろんその値はDate型になり、date_selectを使用して確認画面を通ってフォームの登録完了画面への遷移を実現することが出来ます。