使用外键插入Grails域对象
我有两个域类:使用外键插入Grails域对象,grails,model-view-controller,groovy,gorm,Grails,Model View Controller,Groovy,Gorm,我有两个域类: 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
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)
}
}
}
现在生成了两个表,并且在用户和客户端之间存在一个外键。尽管阅读了grails help文档,但我始终无法理解如何通过相应的客户端插入用户记录。这是控制器中的当前代码。客户端插入正确,但不会插入用户记录
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()
}
请尝试以下代码,在将对象保存到db(如果有)时,它将指出验证问题的确切位置:
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
}
}
}
请尝试以下代码,在将对象保存到db(如果有)时,它将指出验证问题的确切位置:
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
}
}
}
请尝试以下代码,在将对象保存到db(如果有)时,它将指出验证问题的确切位置:
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
}
}
}
请尝试以下代码,在将对象保存到db(如果有)时,它将指出验证问题的确切位置:
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
}
}
}
代码看起来不错。您没有提供足够的信息来确定,但可能是在保存用户时验证失败。调用
user.save()
参数后,请尝试user.save(failOnError:true)
或打印user.errors
。可能会出现错误。常见的情况是请求参数名称以小写字母开头,但由于其他所有参数名称都以大写字母开头,我怀疑实际参数名称可能是UserName
,在这种情况下params.UserName
的计算结果将为null。由于您将其分配给email
属性,该属性不可为空,如果params.userName
为空,则可以解释问题。Eek,userName确实有大写的U以及带P的密码。有时,学习新语言的挫败感会让您忘记基本的编码。谢谢大家的帮助,用户刚刚插入。我觉得很傻。仅供参考。。。在实际应用程序代码中,调用save()
时,应该检查返回值。如果验证器失败,则save()
方法返回nullif(user.save()){//success}else{//error}
。谢谢,这很有帮助。来自c#背景的grails和java通常是一个学习过程。只是在考虑错误处理之前尝试让事情正常工作。代码看起来不错。您没有提供足够的信息来确定,但可能是在保存用户时验证失败。调用user.save()
参数后,请尝试user.save(failOnError:true)
或打印user.errors
。可能会出现错误。常见的情况是请求参数名称以小写字母开头,但由于其他所有参数名称都以大写字母开头,我怀疑实际参数名称可能是UserName
,在这种情况下params.UserName
的计算结果将为null。由于您将其分配给email
属性,该属性不可为空,如果params.userName
为空,则可以解释问题。Eek,userName确实有大写的U以及带P的密码。有时,学习新语言的挫败感会让您忘记基本的编码。谢谢大家的帮助,用户刚刚插入。我觉得很傻。仅供参考。。。在实际应用程序代码中,调用save()
时,应该检查返回值。如果验证器失败,则save()
方法返回nullif(user.save()){//success}else{//error}
。谢谢,这很有帮助。来自c#背景的grails和java通常是一个学习过程。只是在考虑错误处理之前尝试让事情正常工作。代码看起来不错。您没有提供足够的信息来确定,但可能是在保存用户时验证失败。调用user.save()
参数后,请尝试user.save(failOnError:true)
或打印user.errors
。可能会出现错误。常见的情况是请求参数名称以小写字母开头,但由于其他所有参数名称都以大写字母开头,我怀疑实际参数名称可能是UserName
,在这种情况下params.UserName
的计算结果将为null。由于您将其分配给email
属性,该属性不可为空,如果params.userName
为空,则可以解释问题。Eek,userName确实有大写的U以及带P的密码。有时,学习新语言的挫败感会让您忘记基本的编码。谢谢大家的帮助,用户刚刚插入。我觉得很傻。仅供参考。。。在实际应用程序代码中,调用save()
时,应该检查返回值。如果验证器失败,则save()
方法返回nullif(user.save()){//success}else{//error}
。谢谢,这很有帮助。来自c#背景的grails和java通常是一个学习过程。只是在考虑错误处理之前尝试让事情正常工作。代码看起来不错。您没有提供足够的信息来确定,但可能是在保存用户时验证失败。调用user.save()
参数后,请尝试user.save(failOnError:true)
或打印user.errors
。可能会出现错误。常见的情况是请求参数名称以小写字母开头,但由于其他所有参数名称都以大写字母开头,我怀疑实际参数名称可能是UserName
,在这种情况下params.UserName
的计算结果将为null。由于您将其分配给email
属性,该属性不可为null,因此如果params.userName
为null,则可以解释问题。Eek,userName确实为空