Класс домена hasMany не может добавить запись - PullRequest
3 голосов
/ 10 февраля 2012

Я нуб Grails, поэтому, пожалуйста, извините, мой вопрос нуба.
Я создал доменные классы User и Device.Пользователь имеет много устройств: Устройство и Устройство принадлежит пользователю: Пользователь.
Важно, чтобы только 1 устройство никогда не принадлежало двум пользователям, поэтому мой код UserController выглядит следующим образом:

class UserController {

static allowedMethods = [create: 'POST']

def index() { }

def create() {
    def user = User.findByUsername(request.JSON?.username)
    def device = Device.findById(request.JSON?.deviceId)
    if (device) {
        device.user.devices.remove(device)
    }
    // device can only be owned by 1 person
    def new_device = new Device(id: request.JSON?.deviceId, type: request.JSON?.deviceType)

    if ( !user ) {
        user = new User(
                username: request.JSON?.username
        )
        user.devices = new HashSet() // without this I get null on the add in next line
        user.devices.add(new_device)
        user.save()

        if(user.hasErrors()){
            println user.errors
        }
        render "user.create " + request.JSON?.username + " devices.size " + user.devices.size()
    } else {
        user.devices.add( new_device )
        user.save()
        if(user.hasErrors()){
            println user.errors
        }

        render "user.create exists, new token: " + user.token + " devices.size " + user.devices.size()
    }
}

}  

Но теперь я получаюстранная ошибка сервера:
пустой идентификатор в записи устройства (не очищать сеанс после возникновения исключения)

Что мне здесь не хватает ??

Большое спасибо!

1 Ответ

8 голосов
/ 10 февраля 2012

Прежде всего, существуют специальные методы для добавления к и удаления из . Не работайте прямо с коллекциями hasMany. Может быть, это проблематично.

...