2011-12-16 16 views
1

ここで私は珍しい問題に直面しています。すべてが私の理解の中で(grails初心者として)うまくいくはずですが、(Grailsの内部からドメインクラスの参照を設定するにはどうすればよいですか?

私はドメインクラスUserを持っています。他のユーザ、ここでユーザードメインからのコードです - 。

static hasMany = [friends: User, friendRequests: FriendRequest] 
static mappedBy = [friendRequests:'receiver'] 

def sendFriendRequest(User toUser) { 

    if(!isFriend(toUser)) { 
     FriendRequest requestToSend = new FriendRequest(status:'pending', sender: this) 
     toUser.addToFriendRequests(requestToSend) 
     return true 
    } 
    return false 
} 

そしてFriendRequestクラスがある -

class FriendRequest { 

    String status 
    User sender 

    static constraints = { 
    status(inList:["accepted", "pending", "rejected"]) 
    } 

    static belongsTo = [receiver:User] 
} 

さて、問題は、私は、現在のユーザーオブジェクト、そこから私が実行していることを期待しています関数はfriendRequestの送信者として設定されます。Bu不思議なことに、私はparamとして渡しているユーザーを送信者に設定しています!

誰も私が逃していることを説明できますか?

答えて

1

addToFriendRequestsメソッドが送信側をオーバーライドしています。送信者のための1、および受信機のための1:それはFriendRequest.senderUserに2つの参照が必要になりますUser.friendRequests

あなたFriendRequestクラスの逆だと思います。あなたはまた、どの人がfriendRequestsの関係にマップするかをgormに伝える必要があります。 Userクラスのマッピングでこれを行うことができます。

static mappedBy = [friendRequests:'receiver'] 
+0

それは私だけですか、それとも気にしませんか? –

+0

データベース内の関係がどのように表されているかを考えてみましょう。 FriendRequestは、ユーザーごとに複数のフレンドリクエストをサポートするために、ユーザーのIDへの参照を持つ必要があります。一般的なルールは、「多くの」側が「一方の側」への参照を保持するということです。 'hasMany'マップは、どのクラスがUserにリンクしているかを示しますが、その参照をどこに格納するかは言いません。 GrailsはFriendRequestの最初のユーザーである合理的なデフォルトを選択します。 – ataylor

+0

こんにちはataylor、ありがとうございます。はい、私はすでにこのマッピングを 'static mappedBy = [friendRequests: 'receiver']'として行い、問題のfriendRequestクラスを追加しました。 – Anis

関連する問題