Граальс глобальные ограничения - PullRequest
4 голосов
/ 29 января 2010

В версии 1.2 Grails ввел глобальные ограничения. Я попытался добавить следующее в Config.groovy

grails.gorm.default = {

    constraints {
        notBlank(nullable:false, blank:false)
    }
}

Затем, используя его в одном из классов моего домена

static constraints = {
    email(email: true, unique: true, shared: 'notBlank')
}

Но когда я сохраняю пользователя с нулевым адресом электронной почты, об ошибках не сообщается, почему?

Спасибо, Don

Ответы [ 2 ]

6 голосов
/ 29 января 2010

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

static constraints = {
    email(blank:false)
}

Конечно, если вы ожидаете исключение при сохранении, вы его не получите - вам нужно протестировать объект после вызова save () или validate (), как показано в этом классе домена:

class Contact {
    static constraints = {
        name(blank:false)
    }
    String name
}

и его контрольный пример:

import grails.test.*

class ContactTests extends GrailsUnitTestCase {
    protected void setUp() {
        super.setUp()
    }

    protected void tearDown() {
        super.tearDown()
    }

    void testNameConstraintNotNullable() {
        mockDomain Contact
        def contact = new Contact()
        contact.save()
        assertTrue contact.hasErrors()
        assertEquals "nullable", contact.errors["name"]
    }
}

Если вы хотите исключений при сохранении, вы можете добавить этот параметр в свой Config.groovy:

grails.gorm.save.failOnError = true

Я нашел, что это весьма полезно при разработке.

НТН

PS

Чтобы использовать ограничение, которое вы определили, вам нужно добавить это в класс вашего домена:

static constraints = {
    email(shared:"myConstraintName")
}

Но учтите, что вы не можете проверить ограничение в модульном тесте, как встроенные, так как конфигурация не будет прочитана.

2 голосов
/ 29 января 2010

Если вы хотите, чтобы ограничение по умолчанию было применено ко всем свойствам, должно быть:

grails.gorm.default = {
    constraints {
        '*'(nullable:false, blank:false)
    }
}

Если вы хотите назвать ограничение, вы можете применить его к свойству класса домена электронной почты, используя ключ shared :

static constraints = {
    email(email: true, unique: true, shared: "notBlank")
}

По умолчанию в grails - запрещать нулевые свойства, поэтому blank: false - это все, что вам действительно нужно (т. Е. Глобальное значение по умолчанию, которое вы определили в этом случае, не требуется).

...