2012-07-08 10 views
6

Sono nuovo di Grails. Ho una classe di dominio persona come:Grails Scaffolding - definisce i possibili valori per questa proprietà di una classe di dominio

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

e si chiede se posso definire possibili valori per una proprietà - dicono di genere come {M, F, U} in modo che questi tre valori saranno elencati nella casella combinata quando si usa ponteggio dinamico per controllore persona.

Qui volevo solo sapere se esiste una funzionalità di questo tipo nel framework Grails? Se tale caratteristica esiste, allora come posso usarla?

risposta

5

Dalla documentazione http://grails.org/doc/latest/guide/scaffolding.html, si dovrebbe essere in grado di utilizzare un vincolo InElenco:

class Person { 
    String firstName 
    String lastName 
    String gender 
    Date dateOfBirth 

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

Questo dovrebbe patibolo a un elenco di selezione per il campo di genere, a seconda della versione di Grails che si sta utilizzando. 2.0+ lo fa sicuramente.

3

Ecco una soluzione alternativa

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

Questo memorizzerà genere nel database come un intero (1,2,3) e di default il genere a U. Il vantaggio è che si può rinominare quello F, M e U significano senza gestire una migrazione dei dati.

+0

bella alternativa, grazie. – gtiwari333

+0

bella logica per l'elenco di default .. – sanghavi7

Problemi correlati