Как я могу вывести пользовательское ограничение в Grails? - PullRequest
3 голосов
/ 06 августа 2010

Я бы хотел, чтобы мои собственные проверки валидаторов ограничений выходили за пределы определения ограничений для моего атрибута, поскольку это облегчает чтение и повторное использование, но я делаю что-то не так.Я пытаюсь сделать это:

class City {
    String name

    static constraints = {
        name( nullable:false, blank:false, validator: uniqueCityValidator )
    }

    def uniqueCityValidator = {
        if ( City.findByNameILike(it) ) return ['cityExists']
    }
}

Но я получаю следующую ошибку:

groovy.lang.MissingPropertyException: No such property: uniqueCityValidator for class: com.xxx.City
at com.withfriends.City$__clinit__closure2.doCall(City.groovy:7)
at com.withfriends.City$__clinit__closure2.doCall(City.groovy)
at grails.test.MockUtils.addValidateMethod(MockUtils.groovy:857)
at grails.test.MockUtils.prepareForConstraintsTests(MockUtils.groovy:544)
at grails.test.MockUtils$prepareForConstraintsTests.call(Unknown Source)
at grails.test.GrailsUnitTestCase.mockForConstraintsTests(GrailsUnitTestCase.groovy:116)
at com.xxx.CityTests.testUniqueConstraintForSameCase(CityTests.groovy:9)

1 Ответ

6 голосов
/ 06 августа 2010

Закрытие должно быть статическим:

static uniqueCityValidator = {
    if ( City.findByNameILike(it) ) return ['cityExists']
}

У нас есть что-то похожее. В нашем проекте у нас есть собственные ограничения в собственном классе. Таким образом, мы можем использовать их в каждом классе домена. Код выглядит так:

class Validation {
    static uniqueCityValidator = {
        if ( City.findByNameILike(it) ) return ['cityExists']
    }
}

В доменном классе:

static constraints = {
    name( nullable:false, blank:false, validator: Validation.uniqueCityValidator )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...