Rails / ActiveRecord
UniquenessValidatorの問題
ActiveRecordのUniquenessValidatorはDBに保存済みのレコードと重複した場合はvalidationしてくれますが、
ネストしたパラメタで重複したオブジェクトを作ろうとしてもスルーしてしまいます。
例えば以下のパラメタが入力された場合にtag_id
の重複をvalidationできません。
カスタムバリデータでuniqueness validationを行う
今回はこんな感じでvalidationできるようにします。
NestedAttributesUniquenessValidatorの実装
入力パラメタ内での重複をチェックするカスタムバリデータの実装はこんな感じです。
ついでにエラーメッセージも設定しておきます。
NestedAttributesUniquenessValidatorのテスト
カスタムバリデータのテストはこんな感じ。
まとめ
RailsのNested Attributesに欲しい機能が足りないようだったので今回はカスタムバリデータを作りました。
もっといいやり方をご存知でしたらツッコミ歓迎です。よろしくお願いします。
追記: 「has-many関連のuniqueness validationをテストするカスタムマッチャも作ってみた」を追加しました。