3

我是Grails noob,所以請原諒我的noob問題。
我已經創建了一個域類User和Device。用戶擁有許多設備:設備和設備belongsTo用戶:用戶。
只有1設備將永遠屬於兩個用戶是很重要的,所以我的UserController的代碼如下所示:域名類hasMany無法添加條目

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() 
    } 
} 

} 

但現在我得到一個奇怪的服務器錯誤:
在設備進入空ID(不在異常發生後刷新會話)

我在這裏丟失了什麼?

非常感謝!

+0

request.JSON?.deviceId的值是什麼?嘗試使用log.info打印它(request.JSON?.deviceId) – Paul 2012-02-10 19:38:11

回答

8

首先,有特殊的方法add toremove from。不要直接操作hasMany集合。也許這是有問題的。

+0

確實是這個問題。正如我所說 - noob,不知道這些方法。謝謝! – Nadav 2012-02-10 23:31:35