2013-01-09 12 views
6

Voglio controllare che una lista contenga una stringa specifica.Groovy/Grail Contiene con lettere minuscole

prima di controllare tutte le voci in elenco, così come puntura dovrebbe essere in. Minuscolo

ho provato come questo

def venueName = params.name 
def venueNameLists = Venue.executeQuery("select name from Venue") 
    if(venueNameLists.toLowerCase().contains(venueName.toLowerCase())){ 
      error = true; 
      log.debug("save :: duplicate name") 
      flash.message = "Venue name already exist"; 
      render(view: "create", model: [venueInstance: new Venue(params)]) 
      return 
     } 

dà errore

No signature of method: java.util.ArrayList.toLowerCase() is applicable for argument types:() values: []. Stacktrace follows: 

    groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.toLowerCase() is applicable for argument types:() values: [] 

risposta

15

Sono d'accordo con Aiolos: utilizzare i vincoli o cercare di trovare esempio in base al nome caso ignorare. Ma per risolvere questo a modo tuo prova *. (star-dot) operatore:

venueNameLists*.toLowerCase().contains(venueName.toLowerCase()) 
6

Se si desidera controllare un voce duplicata prima di salvare un elemento, utilizzare constraints sulla classe del dominio. Qui puoi usare il vincolo unique o implementare il tuo se ne hai bisogno case insensitive.

Se avete bisogno di controllare manualmente, provate questo:

def venueWithNameFromParams = Venue.findByNameIlike(params.name) // ignore case 
if(venueWithNameFromParams){ 
    // venueName is in venueNameList 
} 
Problemi correlati