1. 针对runtime error的通常处理
around_filter :rescue_record_not_found
def rescue_record_not_found
begin
yield
rescue ActiveRecord::RecordNotFound
render :file => "#{RAILS_ROOT}/public/404.html"
end
end
2. 也可以这么处理
rescue_from ActiveRecord::RecordNotFound, with => :rescue_record_not_found
def rescue_record_not_found
render :file => "#{RAILS_ROOT}/public/404.html"
end
3. 对于其他类型的错误,参考如下:
DEFAULT_RESCUE_RESPONSE = :internal_server_error
DEFAULT_RESCUE_RESPONSES = {
'ActionController::RoutingError' => :not_found,
'ActionController::UnknownAction' => :not_found,
'ActiveRecord::RecordNotFound' => :not_found,
'ActiveRecord::StaleObjectError' => :conflict,
'ActiveRecord::RecordInvalid' => :unprocessable_entity,
'ActiveRecord::RecordNotSaved' => :unprocessable_entity,
'ActionController::MethodNotAllowed' => :method_not_allowed,
'ActionController::NotImplemented' => :not_implemented,
'ActionController::InvalidAuthenticityToken' => :unprocessable_entity
}
DEFAULT_RESCUE_TEMPLATE = 'diagnostics'
DEFAULT_RESCUE_TEMPLATES = {
'ActionView::MissingTemplate' => 'missing_template',
'ActionController::RoutingError' => 'routing_error',
'ActionController::UnknownAction' => 'unknown_action',
'ActionView::TemplateError' => 'template_error'
}