【Ruby On Rails】エラーページの実装【学習記録5】
2013.10.22
セッションまわりやら何やらいじっていたら大分いじれるようになってきた。最初こそ手こずったものの、基本的な機能であれば人に説明できるレベルになったかな…という所感。
正直学習ペース遅いよなーとは思いながらも、それでも自分が使う道具に関しては 人に教えられるくらいには仕組みや概念ごとの繋がりを理解しておきたいよね という思いもあるので。
というわけで、今回はRailsにおけるエラーページの独自実装ということで話を進めていく。
まずは controllers/application.rb に、以下の二つのクラスを定義。一つは404用、もう一つは403用。
class NotFound;end class Forbidden;end
Applicationコントローラ内に以下のコードを追加。
rescue_from NotFound, with: :err_not_found rescue_from Forbidden, with: :err_forbidden : : def err_not_found(exception) render "errors/not_found", status: 404 end def err_forbidden(exception) render "errors/forbidden", status: 403 end
これだけだとルーティングエラー等、根幹の部分で起きるエラーまでは拾ってくれない。
ということで、Applicationコントローラに対し、以下のコードを追加。
rescue_from ApplicationController::RoutingError, with: :err_not_found rescue_from ActiveRecord::RecordNotFound, with: :err_not_found
続いて、config/routes.rb の「最後の”end”の直前の行」に以下のコードを追加。
match "*anything" => "top#not_found"
最後に、topコントローラに not_foundアクションを加え、Applicationコントローラがエラーを捉えるよう再度コントローラから RoutingError を出すようにする。
def not_found raise ApplicationController::RoutingError, "No route matches #{request.path.inspect}" end
これで ページが見つからない場合は404を、「Forbidden」をraiseした時は403を返すようになる。
Written by Nisei Kimura ( 木村 仁星 )