1
0

More than 3 years have passed since last update.

ActiveRecordで今日以前の日付を弾くバリデーションを簡潔に書く

Posted at

概要

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に引っかかる可能性があるのでいい感じに改行して下さい。

まとめ

inclusionlambda使っているあたりが肝でしょうか(lambdaでないとRangeが動的にできないため)。
是非コピペして使って下さい。

1
0
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
1
0