[Ruby on Rails] 입력값 검증을 위한 Custom Exception Class 사용

Ruby on Rails에서 입력값 검증을 누가 하는 게 맞느냐에 대한 논의는 아직도 결론이 나지 않은 것 같다.

일부는 Model을 통하면 아주 쉽게 입력값에 대한 검증을 할 수 있기 때문에 이를 주장하는가 하면, 일부는 Controller에서도 일부 검증이 필요하다고 주장하고 있다.

나는 후자의 의견에 동의한다.

그래서 입력값에 대한 최소한의 검증 (필드의 유무 등) 과정을 Controller가 담당하게 하고, 이를 Custom Exception Class를 사용하기로 했다.

일단 Custom Exception Class를 작성한다.

ROR의 Exception은 별도의 code 없이 message만을 갖기 때문에 code를 받을 수 있는 BaseException Class를 작성하고, 개별 Exception들은 BaseException을 상속받도록 한다.

lib/exceptions.rb

module Exceptions
 class BaseException < StandardError
  attr_accessor :code, :message
  def initialize(code, message)
    @code = code
    @message = message
   end
 end
 
 class BadInput < BaseException
  def initialize(message)
   super(10000, message)
  end
 end
end

 

이 Exception들은 모든 Controller가 사용하게 될 것이기 때문에 ApplicationController에 이 파일을 로드하는 코드를 추가한다.

app/controllers/application_controller.rb

class ApplicationController < ActionController::Base 
 require "exceptions" 
end

 

개별 Controller에서는 다음과 같이 사용하면 된다.

class PublisherController < ApplicationController
def signup

if params[:email].nil?

raise Exceptions::BadInput.new(“email is empty”)
end
rescue Exceptions::BaseException => e
render json: {
“code” => e.code,
“message” => e.message
}
return
end

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s