2013-01-09 13 views
6

リストに特定の文字列が含まれていることを確認したいのですが、あなたがチェックしたい場合にする必要があり刺さとしてだけでなく、リスト内のすべてのエントリをチェックする前にGroovy/Grailsに小文字が含まれています

。私はこの

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 
     } 

ようにしようとした小文字

はエラーに

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

答えて

15

を:制約を使用するか、ケースを無視し、名前でインスタンスを検索してみてください。しかし、これを修正するには、*。(star-dot)演算子:

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

を与えます要素を保存する前にエントリを重複させる場合は、ドメインクラスにconstraintsを使用してください。ここではuniqueという制約を使うこともできますし、必要ならば独自に実装することもできますcase insensitive

あなたはそれを手動で確認する必要がある場合は、この試してみてください。私はアイオロスに同意

def venueWithNameFromParams = Venue.findByNameIlike(params.name) // ignore case 
if(venueWithNameFromParams){ 
    // venueName is in venueNameList 
} 
関連する問題