2013-01-09 14 views
6

Ich möchte überprüfen, ob eine Liste eine bestimmte Zeichenfolge enthält.Groovy/Grails Enthält mit Kleinbuchstaben

bevor alle Einträge in der Liste sowie Stachel Überprüfung sollte sein. Klein

Ich mag dieses

versucht
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 
     } 

gibt Fehler

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: [] 

Antwort

15

Ich stimme mit aiolos: Verwenden Sie Einschränkungen oder versuchen Beispiel nach dem Namen zu finden Fall ignorieren. Aber um das zu beheben, versuchen Sie *. (star-dot) operator:

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

Wenn Sie ein prüfen möchten Duplizieren Sie den Eintrag, bevor Sie ein Element speichern, verwenden Sie constraints für Ihre Domain-Klasse. Hier können Sie unique Einschränkung verwenden oder implementieren Sie Ihre eigenen, wenn Sie es benötigen case insensitive.

Wenn Sie es manuell überprüfen, versuchen Sie dies:

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