4

バージョン 1.2 で、Grails はグローバル制約を導入しました。Config.groovyに以下を追加してみました

grails.gorm.default = {

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

次に、ドメインクラスの1つでそれを使用します

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

しかし、空の電子メール アドレスでユーザーを保存すると、エラーが報告されません。なぜですか?

ありがとう、ドン

4

2 に答える 2

6

グローバル制約を作成しようとしたことはありませんが、フィールドを空白ではなく、null 不可としてマークしたい場合は、新しい制約を作成する必要はまったくなく、これをドメイン クラスに追加するだけです。

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

開発において非常に有用であることがわかりました。

HTH

PS

定義した制約を使用するには、これをドメイン クラスに追加する必要があります。

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

ただし、構成が読み取られていないため、組み込みのもののように単体テストで制約をテストすることはできません。

于 2010-01-28T22:30:37.217 に答える
3

すべてのプロパティに適用されるデフォルトの制約が必要な場合は、次のようにする必要があります。

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

制約に名前を付けたい場合は、共有キーを使用して電子メールのドメイン クラス プロパティに適用します。

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

grails のデフォルトでは、null プロパティは許可されないため、本当に必要なのはblank:falseだけです (つまり、この場合に定義したグローバル デフォルトは必要ありません)。

于 2010-01-29T00:04:26.853 に答える