2016-08-17 3 views
1

안녕하세요 나는 다음과 같은 기능이 있습니다논리 오류

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

만약 내가 당신이라면 'if (myhuman.validate() && myhuman.save())'순서를 바꿀 것입니다. 먼저 유효한 인스턴스인지 확인하고 성공한 후에도 유지하려고 시도합니다. –

답변

0

null 개체에서 작업을 수행 할 수 없으므로 x != null을 확인하십시오. 사실 그것은 다음을 수행하는 것이 더 Groovy의 :

if (!x) { 
    // Logic 
} 

이 때문에 Groovy Truth의 작동합니다.

x == nulltrue으로 확인되면 필요한 모든 작업을 수행합니다. 그러나 귀하의 경우 xnull이 아니기 때문에 x == null은 거짓으로 확인하고 if 블록을 건너 뜁니다. 이것은 Grails에만 국한된 것이 아니라 일반적인 프로그래밍입니다.

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 
}