はじめに
rescue_fromについて軽く調査したので記録する。この記事がだれかの役に立てば幸いです。
結論
raiseで発生させた例外をrescue_from
で検知し、指定したメソッドの実行に繋げることができる。
詳細
大まかな使い方は以下の通りになります。
app/controllers/application_controller.rb
# Forbiddenの例外を捕捉した場合に、rescue_403メソッドを実行する
rescue_from Forbidden, with: :rescue_403
private
def rescue403(e)
render status: :forbidden, json: { message: "アクセス権限がありません" }
end
Forbiddenの例外を発生さえる流れとしては、
app/controllers/application_controller.rb
# 管理者のみに実行権限を与える
def allowed_to_admin_user!
unless admin_user?
# 管理者でなければ例外を発生させる
raise Forbidden
end
end
application_controllerを継承したコントローラーで、
before_action :allowed_to_admin_user!
を追加すれば、各アクションの前に上記の「管理者か否か」の検証を挟むことができる。
おわりに
application_controller.rbの中身までは今まであまり詳しく見たことがなかったので、例外処理自体や、rescue_fromなど学びがあった。