2012-04-16 5 views
0

Userクラスにはusernameというプロパティがあり、このフィールドにはいくつかの制約が定義されているものとします。失敗した制約の名前を取得

class User { 
    String username 

    static constraints = { 
     username blank: false, unique: true, email: true 
    } 
} 

私は

user.save() 

を呼び出す場合usernameフィールド上の制約のいずれかが

user.errors['username'] != null 

を経由して失敗した。しかし、私は把握することができます方法がある場合、私はそれから把握することができますの制約の失敗?

+1

? –

答えて

2

user.errors['username'].codesには、messages.propertiesで検証メッセージを参照するために使用されるいくつかのキーが含まれます。これらを使用して、どの制約が壊れているか把握できます。

例えば、user.errors['username'].codes[-1]messages.propertiesキーの制約の一部が含まれています:

assert user.errors['username'].codes[-1] == 'blank' // if blank constraint fails 
assert user.errors['username'].codes[-1] == 'unique' // if unique constraint fails 
2

Yeap、エラーオブジェクトにcodeプロパティでエラーコードを確認することができます。

def user = new User(email: '') 
user.validate() 
assert user.errors['email'].code == 'blank' 

user.email = 'asdasd' 
user.validate() 
assert user.errors['email'].code == 'email.invalid' 

あなたの場合あるプロパティで複数のエラーが発生する可能性があります。そのプロパティのすべてのエラーを取得するには、allErrorsプロパティを反復するしかありません。

class Foo { 
    String bar, baz 
    static constraints = { 
     bar blank: false 
     baz email: true, notEqual: 'foobar' 
    } 
} 

def foo = new Foo(bar: '', baz: 'foobar') 
foo.validate() 
foo.errors.allErrors.each { 
    println "$it.field: $it.code" 
} 

万一出力のようなもの:あなたが... [ 'ユーザ名'] code` `user.errorsからそれをうまくすることができるかもしれませんができないことを確認

bar: blank 
baz: notEqual 
baz: email.invalid 
関連する問題