2011-12-17 8 views
0

私が持っている2つのドメインクラス:私はfindAllByTaskIsNotNull()DayScheduleクラスに照会するときこの場合findAllBy *はどのように動作しますか?

class Schedule { 
    Date date; 
    static belongsTo = [ user : User ] 
    static hasMany = [ daySchedules : DaySchedule ] 
     static constraints = { 
     date(blank:false) 
     } 
     String toString() { 
       "Belongs to schedule" 
    } 
} 

は今、私はそれがすべてを返すことを期待:

class DaySchedule { 
    Date Todaysdate 
    String startTime; 
    String endTime; 
    String task 
    int priority 
    boolean completed 
    static belongsTo = [ schedule : Schedule ] 
} 

スケジュール

DaySchedule taskDaySchedule)ですが、代わりに"Belongs to schedule"を検索結果として使用します。私はさらに一歩進んで、クエリallTasks場合、期待どおりこの

def allTasks = DaySchedule.findAllByTaskIsNotNull() 
//returns "Belongs to schedule" 

ように私は、すべてのtaskを取得しています。このように:

def expected = allTasks.task 
println expected //prints all tasks! 

私はfindAllByTaskIsNotNull()の行動を理解することができませんでした。だから私の実際の質問findAllByTaskIsNotNull()はすべてtaskを返す必要がありますか?なぜそれが適切なScheduleを見つけるのですか?どうしたの?私はコンセプトを間違って理解していますか?

ありがとうございます。

+0

誰もこの質問に答えるために? –

答えて

2

あなたは本当に間違って概念を理解したと思います。 動的なファインダは、呼び出されているクラスのオブジェクトまたはオブジェクトのリストを取得します。

したがって、あなたの例では、DaySchedule.findAllByTaskIsNotNull()は "DaySchedule"型のオブジェクトを取得します。

"task"はDayScheduleクラスの文字列プロパティに過ぎず、スケジュールクラスにtoStringメソッドを定義して、結果にprintlnを呼び出したときに表示される内容を返しますそのクラスは実際にDayScheduleに属し、DayScheduleクラスにはtoStringメソッドがないためです。あなたが代わりに表示されるタスクのプロパティを持つようにしたい場合は

だから... ...ちょうどあなたのDayScheduleクラスにこれを追加します。そこに

String toString() { 
    return this.task 
} 
+0

ああ、私は間違って理解している!答えをありがとう...あなたの正しい! :) –

1

toStringメソッドがINSIDE static contraintsクロージャであるため、コードに欠陥があります。したがって、toString呼び出しでいくつかの副作用があることには驚かないでしょう。ちょうどメソッド名を見て、クロージャの外toStringを入れてコードを修正するために試してみて、私はまた

をお知らせ:のfindAll - <は--- TaskIsNotNullが、それはそれはヌルタスクを持っていないDyaScheduleを見つけることを意味します>でので、答えはOKです。

+0

申し訳ありませんが、それはタイプミスでした。私は以前と同じ答えを得ています。 –

+0

答えでもっと – fixitagain

+0

ええ今私は理解した..ありがとう... –

関連する問題