f.date_selectで過去の日付は弾き方。
Gemfile
gem 'jc-validates_timeliness'
$ bundle install
必要なファイル群をインストール
bundle exec rails g validates_timeliness:install
エラーメッセージを日本語表示するためにファイルをコピー。
cp config/locales/validates_timeliness.en.yml config/locales/validates_timeliness.ja.yml
validates_timeliness.ja.yml
ja:
errors:
messages:
invalid_date: "は正しい形式で入力してください。"
invalid_time: "は正しい形式で入力してください。"
invalid_datetime: "は正しい形式で入力してください。"
is_at: "は %{restriction} である必要があります。"
before: "は %{restriction} より前を指定してください。"
on_or_before: "は %{restriction} 以前を指定してください。"
after: "は %{restriction} より後を指定してください。"
on_or_after: "は %{restriction} 以降を指定してください。"
validates_timeliness:
error_value_formats:
date: '%Y-%m-%d'
time: '%H:%M'
datetime: '%Y-%m-%d'
日付だけ表示されればよかったので、時間と秒は削除しました。
ja.ymlを持っていない場合はインストール
wget -O config/locales/ja.yml https://raw.githubusercontent.com/svenfuchs/rails-i18n/master/rails/locale/ja.yml
あとはmodelにバリデーションを書くだけ。
今回は昨日以前の日付を弾きたかったので、on_or_after: Date.todayを追記
model_name.rb
validates :column_name, timeliness: { on_or_after: Date.today }
以上です。