Grails Scaffolding - 为域类的此属性定义可能的值

时间:2012-07-08 04:46:20

标签: grails grails-domain-class grails-constraints

我是Grails的新手。我有一个Person域类:

class Person {
    String firstName
    String lastName
    String gender
    Date dateOfBirth
}

想知道我是否可以为属性定义可能的值 - 比如性别为{M,F,U},以便在为Person控制器使用动态脚手架时,这三个值将在组合框中列出。

在这里,我只是想知道Grails框架中是否有这样的功能?如果存在此类功能,那么我该如何使用它呢?

2 个答案:

答案 0 :(得分:5)

从文档http://grails.org/doc/latest/guide/scaffolding.html中,您应该能够使用inList约束:

class Person {
    String firstName
    String lastName
    String gender
    Date dateOfBirth

    def constraints = {
        gender( inList: ["M", "F", "U"])
    }
}

这应该支持性别字段的选择列表,具体取决于您使用的Grails版本。 2.0+肯定会这样做。

答案 1 :(得分:3)

这是另一种解决方案

class Person {
    String firstName
    String lastName
    enum Gender {
        M(1),
        F(2),
        U(3)
        private Gender(int val) { this.id = val }
        final int id
    }
    Gender gender = Gender.U
    Date dateOfBirth

    def constraints = {
        gender()
    }
}

这会将性别在数据库中存储为整数(1,2,3),并将性别默认为U.这里的好处是您可以在不处理数据迁移的情况下重命名F,M和U的含义。