[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? 를 사용하면된다!
바꾼 코드!

좋은 웹페이지 즐겨찾기