2013-01-09 13 views
6

Chcę sprawdzić listę zawiera konkretny ciąg.Groovy/Grails zawiera małe litery

przed sprawdzeniem wszystkich wpisów z listy, jak żądło powinno być w. Małe

Starałem się ten

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 
     } 

daje błąd

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

Odpowiedz

15

zgadzam się z Aiolos: stosować ograniczenia lub spróbować znaleźć przykład według nazwy zignorować sprawę. Aby to naprawić, spróbuj *. (star-dot) operator:

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

Jeśli chcesz sprawdzić zduplikuj wpis przed zapisaniem elementu, użyj constraints na swojej klasie domeny. Tutaj możesz użyć ograniczenia unique lub zaimplementować własne, jeśli potrzebujesz tego case insensitive.

Jeśli trzeba sprawdzić je ręcznie, spróbuj tego:

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