ActiveRecord Validation #5 - Common Validation Options/Strict Validation -

2014-09-04T00:00:00+00:00 rspec Ruby Rails

公式ドキュメント: 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回くらい)

JAX-RS+CDIをArquillianでテスト ng-strict-di