はじめに
Railsでformを使ってデータを登録する事は非常に多いと思います。その中で日付を登録する事も多いと思いますが、ユーザーに過去の日付を登録させたくないケースがあるかと思います。
今回はその対処方法を紹介します。
環境
- Rails:5.0.7
- Ruby:2.5.1
前提
自分が開発している予約アプリを例にしています。reservationモデルのreceivedate(受取日)に制限をかけます。カラム型はdataです。
ソースコード(form)
haml(html)
=form_for [@user, @reservation], url:{ action: :confirm } do |f|
.document-group-form__field
.document-group-form__field--left
= f.label :receivedate, '受取希望日', class: 'document-group-form__label'
.document-group-form__field--right
= f.date_field :receivedate, class: 'document-group-form__input'
対象方法(コントローラーでエラーハンドリング)
reservations_controller.rb
def confirm
@documents = Document.all
@reservation = Reservation.new(reservation_params)
if @reservation.invalid?
redirect_to new_user_reservation_path(current_user), alert: '予約情報が不足しています'
elsif @reservation.receivedate < Date.today
redirect_to new_user_reservation_path(current_user), alert: '過去の日付は選択できません'
end
end
自分はnew→createの間に確認画面を追加しているので、confirmアクションのコントローラーでエラーハンドリングしていますが、createアクションに記述すれば問題ないかと思います。