0

プロパティを持つUserクラスがあり、usernameこのフィールドにいくつかの制約が定義されているとします。

class User {
    String username

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

私が電話したら

user.save()

username次に、フィールドの制約のいずれかが失敗したかどうかを確認できます

user.errors['username'] != null

しかし、どの制約が失敗したかを知る方法はありますか?

4

2 に答える 2

2

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"
}

次のような出力が必要です。

bar: blank
baz: notEqual
baz: email.invalid
于 2012-04-16T21:16:55.020 に答える
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
于 2012-04-16T20:36:21.233 に答える