Padrino (Sinatra) はerrorメソッドを使ってエラーハンドリングができる。
errorメソッドはステータスコード (Integer) か例外クラスを渡す。
class MyApp < Padrino::Application
# ...
error 404 do
"404 Not Found"
end
error ActiveRecord::RecordNotFound do
halt 404
end
end
ちなみにPadrinoはエラー処理がもうちょっと柔軟にできて、コントローラのスコープごとにエラー処理を定義できる。
スコープというのはPadrino.controllerに渡す名前のこと。
MyApp.controller :posts do
error 404 do
"Post is not found"
end
end
MyApp.controller :authors do
error 404 do
"Author is not found"
end
end
しかし、開発環境 (Padrino.env == :development) だとSinatra由来のリッチなスタックトレースを吐くようになっていて、このスタックトレースを見るオプション (show_exception) が有効だと、例外クラスを指定してエラーハンドリングが効かなくなる。切るとちゃんと動く。
class MyApp < Padrino::Application set :show_exception, true end