ここで私は珍しい問題に直面しています。すべてが私の理解の中で(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として渡しているユーザーを送信者に設定しています!
誰も私が逃していることを説明できますか?
それは私だけですか、それとも気にしませんか? –
データベース内の関係がどのように表されているかを考えてみましょう。 FriendRequestは、ユーザーごとに複数のフレンドリクエストをサポートするために、ユーザーのIDへの参照を持つ必要があります。一般的なルールは、「多くの」側が「一方の側」への参照を保持するということです。 'hasMany'マップは、どのクラスがUserにリンクしているかを示しますが、その参照をどこに格納するかは言いません。 GrailsはFriendRequestの最初のユーザーである合理的なデフォルトを選択します。 – ataylor
こんにちはataylor、ありがとうございます。はい、私はすでにこのマッピングを 'static mappedBy = [friendRequests: 'receiver']'として行い、問題のfriendRequestクラスを追加しました。 – Anis