gtiwari333
gtiwari333

Reputation: 25184

Grails Scaffolding - define possible values for this property of a domain class

I am new to Grails. I have a Person domain class as :

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

And wondering if I can define possible values for a property - say gender as {M, F, U} so that these three values will be listed in combo box when using dynamic scaffolding for Person controller.

Here I just wanted to know if there is such feature in Grails framework? If such feature exists , then how can I use it?

Upvotes: 6

Views: 1486

Answers (2)

Jay Prall
Jay Prall

Reputation: 5465

Here is an alternative solution

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()
    }
}

This will store gender in the database as an integer (1,2,3) and default the gender to U. The benefit here is you can rename what F, M, and U mean without handling a data migration.

Upvotes: 3

billjamesdev
billjamesdev

Reputation: 14640

From the documentation http://grails.org/doc/latest/guide/scaffolding.html, you should be able to use an inList constraint:

class Person {
    String firstName
    String lastName
    String gender
    Date dateOfBirth

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

This should scaffold to a select list for the gender field, depending on the version of Grails you're using. 2.0+ definitely does this.

Upvotes: 5

Related Questions