概要
Railsで日付をもったテーブルを追加してそのテーブルに今日以前の日付を入れられないようにしたかったのですが、検索しても専用のメソッドを追加するという記事しか見つからなかっため、それ以外の実装はvalidates
で簡潔できないか調べたらできたというお話しです。
※終端のなしRangeを使っているのでバージョン2.6以降ののRubyでないと動作しません。
確認環境はRuby 2.7.2, Ruby on Rails 6.0.3.4です。
実装
class Hoge < ApplicationRecord
validates :some_date, inclusion: { in: ->(_record) { Time.current.tomorrow.to_date.. }, message: 'に今日以前の日は登録できません' }
end
RuboCop
を導入している人はコピペするとMetrics/LineLength
に引っかかる可能性があるのでいい感じに改行して下さい。
まとめ
inclusion
でlambda
使っているあたりが肝でしょうか(lambda
でないとRangeが動的にできないため)。
是非コピペして使って下さい。