Как я могу установить ссылку на класс Домена изнутри себя в Grails? - PullRequest
1 голос
/ 17 декабря 2011

Здесь я столкнулся с необычной проблемой. Все должно работать в моем понимании (как начинающий 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]
}

Теперь, проблема в том, что я ожидаю, что текущий объект User, из которого я запускаю функцию, будет установлен как отправитель friendRequest. Но странно, что toUser, который я передаю как параметр, устанавливается как отправитель!

Может кто-нибудь объяснить, чего мне не хватает?

1 Ответ

1 голос
/ 17 декабря 2011

Метод addToFriendRequests переопределяет отправителя. Он считает, что FriendRequest.sender является обратным User.friendRequests

Вашему классу FriendRequest понадобятся две ссылки на User: одна для отправителя и одна для получателя. Вам также нужно указать gorm, какой из них возвращается в отношение friendRequests. Вы можете сделать это с отображением в вашем User классе:

static mappedBy = [friendRequests:'receiver']
...