はじめに
カレンダーから日付を入力してもらう際に、過去の日付を選択できないようにしたい。
保存するモデルのカラムはDate型を使用。
ビューでのフォーム作成にはform_withを使用。
開発環境
ruby 2.6.5
Rails 6.0.3.3
方法
※余計な記述は省いています
私の場合はorderモデルのstart_date(Date型)に保存するためのフォーム
index.html.erb
<%= form_with model: @order, url: item_order_path, local: true do |f|%>
<%= f.date_field :start_date, class:"order-date-form %>
<% end %>
カレンダー表示ができて、日付を選択できるようになってます。
しかし、現状では過去の日付も選択できてしまいます。
これを解消するために記述を追加します。
index.html.erb
<%= form_with model: @order, url: item_order_path, local: true do |f|%>
<%= f.date_field :start_date, class:"order-date-form, min: Date.current %>
<% end %>
同じようにカレンダーは表示されますが、過去の日付は選択できないようになりました。
"Date"についてはActive_supportが用意してくれているもので、デフォルトで使えるようです。
"Date.today"ではなく"Date.current"が推奨されています。
詳しくはこちら Railsガイド
さいごに
バリデーションやコントローラーで防ぐのは各々で追加してみてください。