はじめに
Railsでタスク管理アプリを作成した際に、タスクに終了期限を登録するために、deta_selectメソッドにinclude_blankオプションを利用しました。
その時に、ブランクがデフォルトで表示されてしまい困ったので、解決方法を書きたいと思います。
前提
前提条件として、私が利用したRubyとRailsのバージョンは以下の通りです。
ruby '2.5.0'
rails '5.2.3'
再現
今回はすぐに確認できるようrails genererate scaffold
で簡易的にタスク管理機能を実装します。
rails generate scaffold task title:index limit:date
rails db:migrate
上記のコマンドを実行すると、タスクのコントローラー、モデル、ビューが良い感じに設定されると思います。
formを確認すると、次のようになっています。
views/tasks/_form.html.erb
<div class="field">
<%= form.label :limit %>
<%= form.date_select :limit %>
</div>
しかし、終了期限は入力必須ではないので、include_blank
オプションで、ブランクを入れられるように設定します。
views/tasks/_form.html.erb
<div class="field">
<%= form.label :limit %>
<%= form.date_select :limit, include_blank: true %>
</div>
うーん、ブランクがデフォルトで選択されてしまっている。この状態から年月日を選択するのは面倒だな・・・。
ブランクを使えるようにしつつ、今日の日付がデフォルトで選択されるようにしたいな・・・。
解決策
selected
オプションにDate.today
を設定することで、ブランクを残しつつ、今日の日付がデフォルトで選択されるようになります。
<%= form.label :limit %>
<%= form.date_select :limit, include_blank: true, selected: Date.today %>