8

リストに特定の文字列が含まれていることを確認したい。

リスト内のすべてのエントリと文字列をチェックする前に、小文字を入力する必要があります。

私はこのようにしてみました

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

3 に答える 3

22

aiolosに同意します。制約を使用するか、大文字と小文字を区別しない名前でインスタンスを見つけようとします。しかし、これを自分のやり方で修正するには、*.スプレッド演算子)を試してください:

venueNameLists*.toLowerCase().contains(venueName.toLowerCase()) 
于 2013-01-09T09:01:27.070 に答える
6

要素を保存する前に重複エントリをチェックしたい場合は、ドメイン クラスで制約を使用します。ここでは、一意の制約を使用するか、大文字と小文字を区別しない必要がある場合は独自に実装できます。

手動で確認する必要がある場合は、次を試してください。

def venueWithNameFromParams = Venue.findByNameIlike(params.name) // ignore case
if(venueWithNameFromParams){
    // venueName is in venueNameList
} 
于 2013-01-09T08:41:28.173 に答える