ActiveRecord Validation #5 - Common Validation Options/Strict Validation -
公式ドキュメント: http://guides.rubyonrails.org/active_record_validations.html#common-validation-options
引き続きドキュメント読みながらやってみようって事で進めてみる
Common Validation Options
んまぁあんま書く事無いんですが、allow_nil/allow_blank/message/on等が指定出来るバリデーター共通オプション的なのかと思われる。説明する必要無いと思うが
- allow_nil: nilを許可するか
- allow_blank: .blank?による空文字のチェックをするか
- message: 検証エラーの際に使用されるエラーメッセージ
- on: 検証が作用するメソッドを指定(:saveや:create/:update等?)
っていうようなオプションかと。んまぁ特記する事項も特に無いと思うので(ry
Strict Validations
通常ではvalid?メソッドを実行すると真偽値となるtrueかfalseが返ってくるかと思うのだけど、このオプションを使うとvalid?によりfailするようなケースの場合ActiveModel::StrictValidationFailedがスローされる(デフォルトでは)
require "rails_helper"
class Entry < ActiveRecord::Base
validates :name, presence: { strict: true }
end
describe Entry do
it "strict test" do
expect { Entry.new.valid? }.to raise_error(ActiveModel::StrictValidationFailed)
end
end
っていうようにstrictをtrueにするとvalid?でfailするようなケースで例外が発生する。又、送出する例外はstrictのオプションで指定出来るので
require "rails_helper"
class EntryError < StandardError
end
class Entry < ActiveRecord::Base
validates :name, presence: { strict: EntryError }
end
describe Entry do
it "strict test" do
expect { Entry.new.valid? }.to raise_error(EntryError)
end
end
っていうように送出する例外?を指定する事も可能。指定しない場合にのみActiveModel::StrictValidationFailedとなる感じかと
バリデーションでfailするようなケースで例外送出させるようなケースを利用したい場合等においてはstrictを設定する事で検証時に例外を送出させる事が出来るような仕組みかと
ってな感じでActiveRecord Guideもあともうちょいで完了かなと(推定だと3回くらい)