커스텀exception
상황
valid 체크를 하는 exception
을 이용해서 하려고 하는데, 우리가 원하는 메시지를 보내줄 수 없다. 그리고 나는 raise
를 할 때 message
뿐만 아니라 status_code
도 같이 넣어주고 싶다.
어떻게 하면 좋아?
해결
커스텀 exception 클래스를 만들면 된다.
우선 클래스 위치
https://stackoverflow.com/a/43924663 의 답변을 보면 /app/errors/
폴더를 만들어서 넣으면 된다고 한다.
구현 방법
구현에 앞서 어떤 exception 클래스를 상속 받을지를 결정해야한다. 특별한 일 없으면 StandardError 을 상속 받으면 된다.
아래의 코드 처럼 작성하자
코드에 대한 이야기를 하자면, 위에서 말했다시피 exception
으로 2개의 정보를 넘겨주기를 원하므로 initialize
에 2개의 인자를 넣어준다. 그리고 해당 클래스의 인자로 초기화를 해준다.
여기서 주의할 점은 attr_accessor 를 해준다는 점이다. 어찌보면 당연한건데, 이렇게 클래스가 만들어지고 new
를 이용해 만들고 사용할 때 만약 accessor 이 구현되어 있지 않다면 해당 값에 접근하지 못한다.(C++ 의 get, set 을 생각하면됨)
사용법
raise
를 해주고 싶은곳에서 raise WarRequestError.new( params )
를 한다. rescue
에서는 WarRequestError
로 받으면 된다. 또한 이전에 attr_accessor
를 만들었기 때문에 get
해올 수 있다.
Last updated