본문 바로가기

Ruby On Rails/예외처리

문자열 예외처리

API 작업을 하다 보면 숫자만 입력받아야 하는 상황들이 있다. 문자열에 대해서 입력을 받으면 안 되는 상황들에서 예외처리를 어떻게 해야 하는지 알아보자.

 

1. 처리 1

cnt = parmas[:cnt].to_i
  • cnt == 0
    • ''
    • '0'
    • 'string'
  • 즉, 공백, 0, 문자열을 모두 0으로 처리해준다. 그래서 정확한 예외처리를 해줄 수 없다.

2. 처리 2

def count
  cnt = params[:cnt]
  cnt_list = params[:cnt].bytes
  raise ApiExceptions::CustomException.new(:status, 'error message')) if cnt.to_i == 0 && cnt_list.size > 0 && (cnt_list.map { |v| v < 48 || v > 57 }).include?(ture)
rescue => e
  render_error e.class == ApiExceptions::CustomException ? e.msg : e.message
end
  • 이렇게 처리해주면 문자열에 대해서 확실하게 처리해줄 수 있다.
  • 먼저 bytes 메서드는 string을 아스키코드 값 리스트로 리턴해준다.
    • 이렇게 해야 정확한 이유는 0과 '0'은 다르기 떄문이다.
  • cnt.to_i == 0 인 경우가 예외 처리할 대상이다.
  • cnt_list.size > 0 인 경우만 처리한 이유는 공백은 허용해주기 위함이다.
  • map 함수는 안에 있는 v 값이 list의 원소를 의미하고 처리한 내용의 리턴 값을 그 타입으로 한다.
    • 즉 위에서는 boolean값이 리턴 값이 되겠다.
    • true가 있는 경우, 즉, string이 하나라도 존재하면 예외처리를 하게 하였다.
  • 여기서 CustomException은 StandardError class를 상속받아서 예외처리를 간편하게 해 주기 위함이다.
module ApiExceptions
  class CustomException < StandardError
    attr_reader :status, :msg
    
    def initialize(status, msg)
      @status = status
      @msg = msg
    end
  end
end

 

'Ruby On Rails > 예외처리' 카테고리의 다른 글

Controller 예외처리  (0) 2021.12.17