No seu routes.rb
, adicione a última linha
MyAppApi::Application.routes.draw do
# omitted lines
match '*a', :to => 'errors#routing'
end
NOTA: O “a” é na verdade um parâmetro na técnica Rails 3 Route Globbing. Por exemplo, se sua url era / algum-caminho-aleatório, então params [: a] é igual a “algum-caminho-aleatório”. Mas observe que a barra anterior não está lá. Para simular o caminho real, usei em request.path
vez disso.
Crie errors_controller.rb
que herde deapplication_controller.rb
class ErrorsController < ApplicationController
def routing
not_found(ActionController::RoutingError.new("No route matches [#{request.method}] #{request.path}"))
end
end
A exceção lançará a mensagem semelhante a uma mensagem sem rota típica, com o method
e opath
Então, em seu application_controller.rb
, adicione a not_found
ação
class ApplicationController < ActionController::Base
rescue_from ActiveRecord::RecordNotFound, :with => :not_found
def not_found(exception)
respond_to do |format|
format.json { render :json => {:error => exception.message}, :status => :not_found }
format.any { render :text => "Error: #{exception.message}", :status => :not_found }
end
end
end
O cliente obterá esta json
resposta para o caminho não roteável
{
error: "No route matches [GET] /groups/cf8260ab-a431-4e40-8520-a8d24c681639/join"
}