【发布时间】:2015-08-14 23:07:53
【问题描述】:
我有两个域类:
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()
}
【问题讨论】:
-
代码看起来不错。您没有提供足够的信息来确定,但可能是您保存用户时验证失败。在调用
user.save()后尝试user.save(failOnError: true)或打印user.errors。 -
params.userName是嫌疑人。常见的情况是您的请求参数名称以小写字母开头,但由于所有其他参数名称都以大写字母开头,我怀疑实际参数名称可能是UserName在这种情况下params.userName将评估为空。由于您将其分配给不可为空的email属性,因此如果params.userName为空,则可以解释问题。 -
哎呀,用户名确实有一个大写的 U 以及一个带 P 的密码。有时你让学习一门新语言的挫败感让你忘记了编码的基础知识。感谢您的帮助,用户刚刚插入。我觉得很傻。
-
仅供参考...在实际应用程序代码中,您应该在调用
save()时检查返回值。如果验证器失败,save()方法将返回 null。if(user.save()) { // success } else { // error }. -
谢谢,这很有帮助。来自 c# 背景 grails 和 java 通常是一个学习过程。只是在考虑错误处理之前尝试让事情正常工作。
标签: grails model-view-controller groovy grails-orm