かすたあどくりいむ定食

育児、プラモ、音楽(バンド)が趣味なエンジニア(かもしれない)ブログです。

time_selectで時間だけを入力させる[rails]

railsのフォームヘルパーの

タイムセレクトで時間だけを入力できなくてハマりました。

時間が選択できます。

= f.time_select :hoge_at, prompt:true

データはtime型で入力です。 こちらを使って時間だけを投稿させたい!!!!

??????????????

何言ってんだ?こいつ!!ってなりますよね。実はこのフォーム時間を投稿するフォームなのに勝手に年月日を投稿するんですよ。

空で投稿時のパラメータ

"hoge_at(1i)"=>"1", "hoge_at(2i)"=>"1", "hoge_at(3i)"=>"1", "hoge_at(4i)"=>"", "hoge_at(5i)"=>"", 

(1i)は年、(2i)は月、(3i)は日、(4i)は時、(5i)は分をそれぞれ入力しています。time_selectの仕様で勝手に年月日が1で入力されています。 これが起きることで空投稿のバリデーションを組んでもバリデーションにかかりません。年月日のデータが入力されているので。

ここで教えてもらって使ったオプションのが

ignore_data:true

これをつけて

= f.time_select :hoge_at, prompt:true, ignore_data:true

空で投稿すると

"created_at(4i)"=>"", "created_at(5i)"=>""

(1i),(2i),(3i)が消えている!!ってことで空で入力すると空として認識され バリデーションにかかるようになりました。 時と分の値を入力した場合でも年月日は消えています。