Здесь я столкнулся с необычной проблемой. Все должно работать в моем понимании (как начинающий 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. t странно, что toUser, который я передаю как параметр, задается как отправитель!
Может кто-нибудь объяснить, что мне не хватает?
Это он или я чувствую себя испорченным? –
Это помогает думать о том, как отношения представлены в базе данных. FriendRequest должен иметь ссылку на идентификатор пользователя, чтобы поддерживать несколько запросов друзей на пользователя. Общее правило - «много» сторона держит ссылку на «одну» сторону. На карте 'hasMany' говорится, какой класс связан с User, но он не говорит, где хранить эту ссылку. Grails просто выбирает разумный дефолт, первый пользователь в FriendRequest. – ataylor
Привет, ателор, Большое спасибо за быстрый ответ. Да, я уже сделал это сопоставление как 'static mappedBy = [friendRequests: 'receiver']' и добавив класс friendRequest. – Anis