嗨我有以下功能:
def signup(String name){
def x =Human.where{name == name}
if(x != null)
{
def myhuman=new Human(name: name)
if(myhuman.save() && myhuman.validate())
{
redirect(url:"https//localhost:8080")
}
}
else
{
return
}
}
工作正常。我可以创建具有不同名称的人,但我无法创建具有相同名称的人,但是我想知道为什么我们为什么要检查x!=null
,我们不应该检查x == null
因为我们首先看看这样的人是否存在,如果我们不创造它。我试过x==null
,我不能创造人类,有人可以解释吗?
答案 0 :(得分:0)
您检查x != null
,因为您现在可以对null
对象执行操作吗?事实上,执行以下操作更具Groovy:
if (!x) {
// Logic
}
这是因为Groovy Truth。
如果x == null
验证true
,那么您可以正常执行您需要的任何操作。但是,由于在您的情况下x
不是null
,x == null
将验证为false并跳过if
块。这不是特定于Grails的,它是一般编程。
答案 1 :(得分:0)
您可以使用Elvis操作符,如果该用户不存在,则创建一个新操作符。
当一个人存在时,它有一个id,所以你检查是否有一个id,如果没有,你保存它并进行重定向。
您不需要验证对象,save方法在保存之前验证对象,如果未验证,则返回false。
Human human = Human.findByName(name)?: new Human(name: name)
if(!human.id && human.save()){
redirect(url:"https//localhost:8080")
}else{
return
}