find_sole_by 작동 방식
find_sole_by 메서드는 find_by와 유사하지만, 다음과 같은 중요한 차이점을 가집니다.
-
단일 레코드 보장: 검색 조건에 일치하는 레코드가 하나여야만 정상적으로 반환됩니다.
-
예외 발생: 만약 조건에 맞는 레코드가 여러 개 발견되면
ActiveRecord::SoleRecordExceeded예외를 발생시킵니다. -
레코드 없음 처리: 조건에 맞는 레코드가 전혀 없을 경우
ActiveRecord::RecordNotFound예외를 발생시킵니다.
예제: 특정 이메일로 사용자 찾기
특정 이메일 주소를 가진 사용자를 찾는 시나리오를 통해 find_sole_by의 동작을 이해할 수 있습니다.
ruby
user = User.find_sole_by(email: "jane.doe@example.com")
위 코드는 다음과 같은 결과를 초래할 수 있습니다.
-
단일 사용자: “jane.doe@example.com” 이메일을 가진 사용자가 한 명만 존재하면, 해당
user객체가 반환됩니다. -
사용자 없음: 해당 이메일로 일치하는 사용자가 없으면
ActiveRecord::RecordNotFound예외가 발생합니다. -
여러 사용자: 해당 이메일로 두 명 이상의 사용자가 발견되면
ActiveRecord::SoleRecordExceeded예외가 발생합니다.
예외 처리
find_sole_by는 여러 레코드가 발견될 때 예외를 발생시키므로, 코드에서 이를 적절히 처리하는 것이 중요합니다.
ruby
begin
user = User.find_sole_by(email: "jane.doe@example.com")
rescue ActiveRecord::SoleRecordExceeded
puts "해당 이메일 주소를 가진 사용자가 여러 명 있습니다!"
rescue ActiveRecord::RecordNotFound
puts "해당 이메일 주소를 가진 사용자가 없습니다."
end
이러한 예외 처리를 통해 애플리케이션의 안정성을 높이고, 데이터 불일치 상황에 대한 사용자 친화적인 피드백을 제공할 수 있습니다.