코드가 작동하지 않는 이유는 무엇입니까?
이 where
메서드는 ActiveRecord :: Relation 객체를 반환 합니다 (의 결과를 포함하는 배열처럼 작동 함 where
). 비어있을 수 있지만nil
.
Business.where(id: -1)
Business.where(id: -1).nil?
Business.where(id: -1).empty?
하나 이상의 레코드가 있는지 테스트하는 방법은 무엇입니까?
옵션 1 : 사용.exists?
if Business.exists?(user_id: current_user.id)
else
end
옵션 2 : 사용 .present?
(또는 .blank?
의 반대 .present?
)
if Business.where(:user_id => current_user.id).present?
else
end
옵션 3 : if 문의 변수 할당
if business = Business.where(:user_id => current_user.id).first
business.do_some_stuff
else
end
이 옵션은 일부 린터 (예 : Rubocop)에 의해 코드 냄새로 간주 될 수 있습니다.
옵션 3b : 변수 할당
business = Business.where(user_id: current_user.id).first
if business
else
end
.find_by_user_id(current_user.id)
대신 사용할 수도 있습니다..where(...).first
최상의 옵션 :
Business
개체를 사용하지 않는 경우 : 옵션 1
Business
개체 를 사용해야하는 경우 : 옵션 3
where
하면 레코드가없는 경우 빈 배열이 반환됩니다. 그리고[]
같지 않습니다nil