2015-08-14 2 views
0

У меня есть два класса домена:Вставить объект Grails домена с внешним ключом

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

}

Теперь две таблицы генерируются и внешний ключ существует с пользователем клиент. Я не могу для жизни, несмотря на то, что прочитал грабли, которые помогают документировать, как вставить запись пользователя с соответствующим клиентом. Это текущий код в моем контроллере. Клиент встает правильно, но не будет вставлять запись пользователя.

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.errors' после вызова' user.save() '. –

+2

'params.userName' является подозреваемым. Обычным было бы для ваших имен параметров запроса начинать с строчной буквы, но поскольку все остальные начинаются с буквы в верхнем регистре, я подозрюю, что фактическое имя параметра может быть «UserName», в этом случае 'params.userName' будет оценивать значение null. Поскольку вы назначаете это свойство 'email', которое не является нулевым, если' params.userName' было null, что бы объяснить проблему. –

+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 
     } 
    } 
} 
Смежные вопросы