Manipulando ActiveRecord :: RecordNotFound com ActionController :: Metal
Estou no estágio de desenvolvimento (JSON) API e decido herdar meuApiController
deActionController::Metal
para tirar vantagens de velocidade etc.
Então eu incluí um monte de módulos para fazer funcionar.
Recentemente decidi responder com resultado vazio quando o registro não foi encontrado. Trilhos já lançaActiveRecord::RecordNotFound
deModel#find
método e eu tenho tentado usarrescue_from
para pegá-lo e escrever algo assim:
module Api::V1
class ApiController < ActionController::Metal
# bunch of included modules
include ActiveSupport::Rescuable
respond_to :json
rescue_from ActiveRecord::RecordNotFound do
binding.pry
respond_to do |format|
format.any { head :not_found }
end
end
end
end
Depois de chamar minha ação simples
def show
@post = Post.find(params[:id])
end
E a execução nunca alcançarescue_from
. É lançado:
ActiveRecord::RecordNotFound (Couldn't find Post with id=1
no meu arquivo de log.
Eu tenho tentado e no modo de produção. O servidor responde com 404, mas o corpo de resposta é padrãoHTML página de erro paraJSON pedido.
Funciona bem quando eu mudo a herança deActionController::Metal
paraActionController::Base
.
Você pode notar sobre a falta derespond_with
ligar. Isso porque estou usandoRABL como meu sistema de template.
Então a questão é: há alguma chance de fazerrescue_from
trabalhar comMetal
ou se livrar HTML de resposta?