1

「and」句と「or」句がgrailsのfindAll()メソッド内で機能しないのはなぜですか?

たとえば、次のコード:

Student.findAll {
   and {
      name == "A"
      name ==~ "%A" 
   }
}.collect { it.name }

リストを生成します:

['AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ']

これは間違っています。何も生み出さなかったはずです。正確な名前「A」と末尾「A」を持つ条件に一致するレコードはありません。表示されている文字列は、私の Student テーブル内のすべてのレコードをリストしています。

少し悪化します。このコード:

Student.findAll {
   or {
      name == "A"
      name ==~ "%A" 
   }
}.collect { it.name }

同じリストを生成します。

['AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ']

実際には、レコード「AA」だけを返す必要があります。

このコードに何か問題がありますか?

ありがとう!

4

1 に答える 1

1

基準で通常のブール演算子を使用します。例:

Student.findAll {
    name == "A" && name ==~ "%A" 
}.collect { it.name }

Student.findAll {
    name == "A" || name ==~ "%A" 
}.collect { it.name }
于 2013-02-06T16:27:29.917 に答える