【rails】 존재하지 않는 데이터에 액세스했을 때의 예외 처리

3956 단어 루비Rails

레코드에 없는 데이터에 액세스함



만든 컨트롤러에

profile_controller.rb
class ProfilesController < ApplicationController

  def show
    @profile = Profile.find(params[:id])
  end

end

그리고 만 쓰고 적절한 예외 처리를 작성하지 않은 경우 존재하지 않는 데이터의 URL에 액세스하려고하면

ActiveRecord::RecordNotFound라는 오류가 발생합니다.
이와 같이 레코드에 데이터가 존재하지 않는 경우의 예외 처리를 써 갑니다.

rescue를 이용한 예외 처리


rescue 를 사용하면, 에러가 발생했을 경우 다음에 하는 처리를 쓸 수가 있습니다.
이번에는 프로필 컨트롤러에서 발생한 오류를 처리합니다.
id를 지정하고 쿼리를 실행한 후 레코드에 해당 매개 변수가 있는 데이터가 없는 경우 프로필의 index 페이지로 리디렉션되는 처리를 rescue 를 사용하여 씁니다.

profile_controller.rb
class ProfilesController < ApplicationController

  def show
    @profile = Profile.find(params[:id])

    #以下を追記
    rescue ActiveRecord::RecordNotFound => e
    redirect_to profiles_path
  end

end

이 설명을 통해 프로필 컨트롤러의 show 작업이 데이터베이스에서 데이터를 검색하는 과정을 수행하고 ActiveRecord::RecordNotFound라는 오류가 프로필 index 페이지로 리디렉션됩니다.

rescue_from을 사용한 예외 처리


rescue_from 는 예외를 하나의 컨트롤러 전체에서 처리할 수 있습니다.
즉 show 액션 외에 edit, update, delete에서도 같은 처리를 하고 싶은 경우

profile_controller.rb
class ProfilesController < ApplicationController
#以下を追記
  rescue_from ActiveRecord::RecordNotFound, with: :record_not_found

  def show
    @profile = Profile.find(params[:id])
  end

  def edit
    @profile = Profile.find(params[:id])
  end
#省略
#以下を追記
  private

  def record_not_found
    redirect_to profiles_path
  end

end

이와 같이 처리를 작성하는 것으로, 프로파일 콘트롤러의 데이터를 취득하는 처리를 실행하는 액션으로부터 존재하지 않는 데이터에 액세스 했을 경우, index 페이지에 리디렉션 되게 됩니다.

좋은 웹페이지 즐겨찾기