[TIL 52] Ruby on Rails | nil?, empty?, blank?, present?
레일즈로 장바구니 기능을 구현하다가 문제를 마주하게 되었다.
우선 나는 장바구니가 비어있을 경우에 상품을 추가하면 pending상태의 order가 하나 생성되고, 장바구니에 상품이 있는 경우에는 존재하는 pending상태의 order에 추가하는 형식의 로직을 구성하려고 했다.
그래서 처음에는 if pending_order.nil?
로 조건을 걸었는데 장바구니에 상품을 넣을때마다 order가 생성되었다..
nil? 메소드는 pending_order가 nil인 경우에만 true를 리턴하게 되는데 @user.orders.pending 에서는 실제로 pending인 order가 없는 경우에 nil이 아닌 빈 배열을 리턴하게된다. 따라서 if pending_order.nil? 은 항상 false값이 리턴되기 때문에 else구문에 들어있는 create가 실행되는 것이였다.
그래서 알아보게 된 nil, empty, blank, present의 차이!
nil
nil?은 해당 오브젝트가 nil인지를 판별하여 알려준다.
NilClass의 오브젝트인 nil만이 nil?에 true로 응답하며 그외의 모든 오브젝트는 false를 반환한다.
empty
element가 존재하는지를 판단할때 사용한다. 예를 들어 해시나 배열이 비어있는지 확인할 때 사용한다.
blank
객체가 정의되어있고, 비어있지 않은지를 판별한다.
!order || order.empty? # order가 정의되어있고 비어있지 않은지를 판별
order.blank? # 위와 동일
present
blank와 정반대의 개념!
따라서 내 경우의 경우 present? 를 사용하면된다!
바꾼 코드!
Author And Source
이 문제에 관하여([TIL 52] Ruby on Rails | nil?, empty?, blank?, present?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nsunny0908/TIL-52-Ruby-on-Rails-nil-empty-blank-present저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)