🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1851閲覧

Rails f.time_selectで時間だけを入力させたい

kokotaro

総合スコア22

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/09/09 07:55

編集2019/09/09 08:03

###やりたいこと
現在作成中のアプリで時間を投稿できるようにf.time_selectをhtmlに設置して時間セレクトフォームを作りました。
時間と分の入力項目(セレクトフォーム)で何も選択しないで送信するとバリデーションエラーにかかるようにしたいです。

####問題点
バリデーションにpresence:trueをかけ入力必須にしていますが、
時間と分を未選択で送信してもエラーにならずに入力されてしまいます。

いざ、送信ボタンを押した時のパラメーターをログで確認すると

<%= f.time_select :created_at, prompt:true %>

送信されたパラメーター

Parameters: {"utf8"=>"✓", "authenticity_token"=>"Dmc3gmFfOeCvM60K1t92TsylXoamtcbRaRmTAw3xfRmS16ODOD6w1f73+PceY/26PcmbxkZO3NxmU7GdlJN+zw==", "product"=>{ "created_at(1i)"=>"1", "created_at(2i)"=>"1", "created_at(3i)"=>"1", "created_at(4i)"=>"", "created_at(5i)"=>""}, "commit"=>"送信する"}

chromeの開発ツールで見ると

<input type="hidden" id="product_created_at_1i" name="product[created_at(1i)]" value="1"> <input type="hidden" id="product_created_at_2i" name="product[created_at(2i)]" value="1"> <input type="hidden" id="product_created_at_3i" name="product[created_at(3i)]" value="1"> <select id="product_created_at_4i" name="product[created_at(4i)]"> <option value="">時</option> <option value="00">00</option> <option value="01">01</option> <option value="02">02</option> <option value="03">03</option> <option value="04">04</option> <option value="05">05</option> <option value="06">06</option> <option value="07">07</option> <option value="08">08</option> <option value="09">09</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> </select> <select id="product_created_at_5i" name="product[created_at(5i)]"> <option value="">分</option> <option value="00">00</option> <option value="01">01</option> <option value="02">02</option> <option value="03">03</option> <option value="04">04</option> <option value="05">05</option> <option value="06">06</option> <option value="07">07</option> <option value="08">08</option> <option value="09">09</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> <option value="32">32</option> <option value="33">33</option> <option value="34">34</option> <option value="35">35</option> <option value="36">36</option> <option value="37">37</option> <option value="38">38</option> <option value="39">39</option> <option value="40">40</option> <option value="41">41</option> <option value="42">42</option> <option value="43">43</option> <option value="44">44</option> <option value="45">45</option> <option value="46">46</option> <option value="47">47</option> <option value="48">48</option> <option value="49">49</option> <option value="50">50</option> <option value="51">51</option> <option value="52">52</option> <option value="53">53</option> <option value="54">54</option> <option value="55">55</option> <option value="56">56</option> <option value="57">57</option> <option value="58">58</option> <option value="59">59</option> </select>

created_at(1i)..(5i)までのカラム?が存在します。
年が(1i)、月が(2i)、日が(3i)、時間が(4i)、分が(5i)です。
画面上表示されてるセレクトフォームは時間と分だけです。

自分の中では時間と分を未選択で送信しても年月日が1の値を送信してるので空として認識されいようになっていると考えています。

年月日の値を空にする方法を教えていただきたいです。

####試したこと
f.time_fieldで実装したらバリデーションエラーにかかりましたが、ブラウザがchromeだと問題ないのですがfirefox、safariだとうまく動作しなかったのでtime_selectでの実装をしたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

no1knows

2019/09/14 11:18

「バリデーションにpresence:trueをかけ」など該当するコードの提示をいただくと回答がつきやすくなるかと思います。
guest

回答1

0

自己解決

https://hellhellmymy.hatenablog.com/entry/2019/09/29/223203
上記記事の内容で解決
ignore_data:trueのオプション追記

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

投稿2022/02/02 00:23

kokotaro

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問