2009-02-06 5 views
16

Diciamo che ho definito un oggetto Utente tramite GORM. Ogni utente può avere zero o più login: s. Ogni accesso ha un timestamp. Durante il recupero di user.logins voglio che gli accessi siano ordinati in base al valore di login.date. Qual è il modo corretto di Grails per raggiungere questo obiettivo?Definizione dell'ordine di ordinamento predefinito in Grails/GORM

Esempio: voglio il seguente codice per elencare tutti gli accessi dell'utente in ordine crescente.

<g:each var="login" in="${user.logins}"> 
    <tr> 
    <td>${login.date}</td> 
    </tr> 
</g:each> 

Queste sono le classi di riferimento:

class User { 
    ... 
    def hasMany = [logins: Login] 
    static fetchMode = [logins: "eager"] 
} 

class Login { 
    Date date 
    ... 
    def belongsTo = [User] 
} 

sto correndo Grails 1.0.4 che è l'ultima versione stabile.

risposta

8

La manipolazione di ordinamento predefinito in Grails/GORM sembra avere stato radicalmente semplificato in Grails 1.1:

14

Basta fare la classe di login implementare l'interfaccia Comparable:

class Login implements Comparable { 

    // ... 

    Date date 

    public int compareTo(def other) { 
     return date <=> other?.date // <=> is the compareTo operator in groovy 
    } 

} 

e dichiarare la relazione di essere un SortedSet:

class User { 
    ... 
    def hasMany = [logins: Login]    
    SortedSet logins 

    static fetchMode = [logins: "eager"] 
} 
27

Mostrano come eseguire questa operazione nella pagina GORM nella guida di riferimento (sezione 5). Il bit che vuoi è vicino alla fine di quel documento è la sezione che desideri. Hanno due semplici esempi:

class Airport { 
    … 
    static mapping = { 
     sort "name" 
    } 
} 

class Airport { 
    … 
    static mapping = { 
     sort name:"desc" 
    } 
} 

Hanno anche un esempio di ordinamento su un'associazione:

class Airport { 
    … 
    static hasMany = [flights:Flight] 
    static mapping = { 
     flights sort:'number' 
    } 
} 
+2

E se si vuole scendere in associazione: 'voli sorta: 'numero', ordine: 'desc ''(per http://grails.1312388.n4.nabble.com/sort-by-association-descending-td1312425.html) –

+0

Come posso ordinare più attributi? – ricardogobbo