行動すれば次の現実

ほどよくモダンなシステム開発を目指しています。メインテーマは生産性、Ruby、Javascriptです。

ActiveModel valid?でバリデーション例外を発生させる | Rails

ActiveModelのvalid?はモデルのバリデーションを実行して真偽値を返却するメソッドですが、バリデーションエラー時に例外を発生させたいことがあったので調べてみました。

通常ならsave!やcreate!で対応できますが、Activerecord-importのBulkインサートの永続化前にバリデーションチェックをするなどのケースです。

実装

unless product.valid?
  raise ActiveRecord::RecordInvalid, product
end

valid?が真の場合は、対象オブジェクトをActiveRecord::RecordInvalidの例外クラスに詰めてあげれば永続化することなく例外を発生することが可能です。