2015-08-14 52 views
0

插入的Grails Domain對象,我有兩個領域類:與外鍵

class User { 
Client client 
String firstName 
String lastName 
String email 
String password 
String address 
String city 
String state 
String zip 
String phone 
Integer active 
Date changedate 

static belongsTo = [client : Client] 

static constraints = { 
    firstName(nullable: false, blank:false) 
    lastName(nullable: false, blank:false) 
    email(nullable: false, blank: false) 
    address(nullable:false,blank:false) 
    city(nullable:false,blank:false) 
    state(nullable:false,blank:false) 
    zip(nullable:false,blank:false) 
    phone(nullable:false,blank:false) 
    active(nullable:false,blank:false) 
    changedate(nullable:false,blank:false) 
} 

}

class Client { 
String name 
String webaddress 
String address 
String city 
String state 
String zip 
String phone 
Integer active 
Date changedate 

static constraints = { 
    name(unique:true, nullable: false, blank:false) 
    address(nullable:false,blank:false) 
    city(nullable:false,blank:false) 
    state(nullable:false,blank:false) 
    zip(nullable:false,blank:false) 
    phone(nullable:false,blank:false) 
    active(nullable:false,blank:false) 
    changedate(nullable:false,blank:false) 
} 

}

現在兩個表生成和外鍵從用戶的存在是爲了客戶。儘管閱讀了Grails的幫助文檔,但我仍然無法爲自己的生活找出如何在相應的客戶端插入用戶記錄。這是我的控制器中的當前代碼。客戶端插入正確,但不會插入用戶記錄。

def register(){ 

    Client newClient = new Client (
     name: params.Company, 
     webaddress: params.WebAddress, 
     address: params.CompanyAddress, 
     city: params.CompanyCity, 
     state: params.CompanyState, 
     zip: params.CompanyZip, 
     phone: params.CompanyPhone, 
     active: 1, 
     changedate: new Date()   
    ) 
    newClient.save() 
    User user = new User (
     client: newClient, 
     firstName: params.FirstName, 
     lastName: params.LastName, 
     email: params.userName, 
     password: params.Password, 
     address: params.Address, 
     city: params.City, 
     state: params.State, 
     zip: params.Zip, 
     phone: params.Phone, 
     active: 1, 
     changedate: new Date() 
    ) 
    user.save() 

} 
+2

的代碼看起來不錯。您沒有提供足夠的信息來說明問題,但可能會在保存用戶時驗證失敗。嘗試'user.save(failOnError:true)'或在調用'user.save()'後打印'user.errors'。 –

+2

'params.userName'是一個嫌犯。常見的情況是你的請求參數名以小寫字母開頭,但因爲其他所有字母都以大寫字母開頭,所以我懷疑實際參數名可能是'UserName',在這種情況下'params.userName'將評估爲null。既然你將它分配給不能爲空的'email'屬性,如果'params.userName'爲空就可以解釋問題。 –

+0

Eek,userName確實有一個大寫的U以及一個P的密碼。有時你讓學習一種新語言的挫敗感讓你忘記了編碼的基礎知識。感謝幫助傢伙,用戶剛插入。我感到很傻。 – user1769667

回答

3

試試下面的代碼會指出究竟在何處驗證問題而保存對象,以分貝如有:

def register(){ 

    Client newClient = new Client (
      name: params.Company, 
      webaddress: params.WebAddress, 
      address: params.CompanyAddress, 
      city: params.CompanyCity, 
      state: params.CompanyState, 
      zip: params.CompanyZip, 
      phone: params.CompanyPhone, 
      active: 1, 
      changedate: new Date() 
    ) 
    if(newClient.save(flush: true)){ 
     User user = new User (
       client: newClient, 
       firstName: params.FirstName, 
       lastName: params.LastName, 
       email: params.userName, 
       password: params.Password, 
       address: params.Address, 
       city: params.City, 
       state: params.State, 
       zip: params.Zip, 
       phone: params.Phone, 
       active: 1, 
       changedate: new Date() 
     ) 
     if(!user.save(flush: true)){ 
      user.errors.each { 
       println it 
      } 
     } 
    } 
    else { 
     newClient.errors.each { 
      println it 
     } 
    } 
}