LoginSignup
2
3

More than 3 years have passed since last update.

【Rails】date_fieldで過去日付の登録を防ぐ方法

Last updated at Posted at 2020-04-11

はじめに

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アクションに記述すれば問題ないかと思います。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3