Grails validate () перезаписывает отклоняет - PullRequest
3 голосов
/ 25 сентября 2011

Я знаю, что это ошибка , но вызов validate () для класса домена перезаписывает любые отклонения, которые были вставлены ранее:

def save = {
    def assignment = new Assignment(params)

    assignment.errors.reject("assignment.error")

    // Save
    if (assignment.validate()) {
        //rejected error is gone
        assignment.save()
        redirect action: "list"
    }
    else {
        //render errors
        render view: "create", model: [instance: assignment]
    }
}

Итак, до этой проблемыисправлен (он существовал начиная с Grails 1.0 и теперь почти 2.0), есть ли какой-нибудь умный обходной путь для сохранения отклонений и использования парадигмы if validate () и save () сразу?

Ответы [ 2 ]

3 голосов
/ 25 сентября 2011

Это не ошибка, это дизайн.Позвонив по номеру validate(), вы запрашиваете, чтобы процесс проверки начался заново.Если вы хотите, чтобы звонки reject() включались в ошибки, поместите их после звонка на validate().

0 голосов
/ 11 мая 2016

@ Берт прав, к сожалению.Это дизайн, хотя этот дизайн отрывочен.Проблема в том, что в некоторых случаях Grails самостоятельно проверяет негласно, стирая пользовательские ошибки там, где их не следует стирать.

Таким образом, вы не только должны избегать вызова validate (), вы также должны избегать того, чтобы платформа молча стирала ваши ошибки в различных точках.

Иногда вы можетеобойти это, используя Domain.read (params.id) вместо Domain.get (params.id).

Grails read () Docs

Результирующая связь между ручным добавлением ошибок и автоматическим поведением grails, на мой взгляд, неинтуитивна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...