Как пропустить проверки для некоторых полей класса grails [duplicate]

После использования WhenAll вы можете вывести результаты по отдельности с помощью await:

var catTask = FeedCat();
var houseTask = SellHouse();
var carTask = BuyCar();

await Task.WhenAll(catTask, houseTask, carTask);

var cat = await catTask;
var house = await houseTask;
var car = await carTask;

Вы также можете использовать Task.Result (поскольку вы знаете, что к этому моменту все они завершены успешно). Однако я рекомендую использовать await, потому что это явно правильно, в то время как Result может вызвать проблемы в других сценариях.

3
задан ubiquibacon 26 August 2013 в 14:52
поделиться

2 ответа

Учитывая следующий класс Foo domain

class Foo {
    String foo
    String bar
    String baz

    static constraints = {
        foo size: 4..7
        bar size: 4..7
        baz size: 4..7
    }
}

Валидация для baz может быть исключена следующим образом:

Foo foo = new Foo(foo: "fool", bar: "bars", baz: "baz")

//Gather all fields
def allFields = foo.class.declaredFields
                         .collectMany{!it.synthetic ? [it.name] : []}
//Gather excluded fields
def excludedFields = ['baz'] //Add other fields if necessary

//All but excluded fields
def allButExcluded = allFields - excludedFields

assert foo.validate(allButExcluded)
assert foo.save(validate: false) //without validate: false, validation kicks in
assert !foo.errors.allErrors

Нет прямого способа отправить список исключенных полей для проверки.

9
ответ дан dmahapatro 19 August 2018 в 11:21
поделиться
  • 1
    Я действительно искал «groovier». способ сделать это, поэтому я не уверен, что это еще полезно или нет. Если "groovier" путь не существует. Я ожидал использовать getConstrainedProperties () , но похоже, что ваше решение по сути делает то же самое. К сожалению, для меня единственное поле, которое я не хочу проверять, является переходным и не содержится в списке allFields из вашего ответа (хотя transients есть, но, вероятно, включает все переходные поля). – ubiquibacon 23 August 2013 в 22:13
  • 2
    Кроме того, в вашем списке есть много лишних записей в списке allFields, а именно constraints, instanceControllersDomainBindingApi, $defaultDatabindingWhiteList, instanceDatabindingApi, errors, id, version, log и instanceConvertersApi. Я не понимаю, почему все эти записи существуют, и почему запись transients была заменена фактическими переходными полями. – ubiquibacon 23 August 2013 в 22:18
  • 3
    Я обновил свой вопрос с помощью метода, который я бы использовал, если что-то лучше не существует. – ubiquibacon 23 August 2013 в 22:52
  • 4
    Я думаю, что нет лучшего способа сделать это :( Спасибо за подтверждение. – ubiquibacon 27 August 2013 в 14:39

Вы можете определить настроенные карты ограничений , которые затем можно эффективно фильтровать из поддерживающих классов команд или Config.groovy через параметр exclude.

0
ответ дан Anatoly 19 August 2018 в 11:21
поделиться