Manejo de ActiveRecord :: RecordNotFound con ActionController :: Metal
Estoy en la etapa de API de desarrollo (JSON) y decido heredar miApiController
desdeActionController::Metal
para tomar ventaja de la velocidad etc.
Así que he incluido un montón de módulos para que funcione.
Recientemente he decidido responder con un resultado vacío cuando no se encuentra el registro. Los carriles ya tiran.ActiveRecord::RecordNotFound
desdeModel#find
Método y he estado tratando de usarrescue_from
Para atraparlo y escribir algo como esto:
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
Después de llamar a mi simple acción.
def show
@post = Post.find(params[:id])
end
Y la ejecución nunca llega.rescue_from
. Se tira
ActiveRecord::RecordNotFound (Couldn't find Post with id=1
en mi archivo de registro.
Lo he estado probando y en modo producción. El servidor responde con 404 pero el cuerpo de respuesta es estándarHTML página de error paraJSON solicitud.
Funciona bien cuando cambio la herencia deActionController::Metal
aActionController::Base
.
Usted puede notar sobre la falta derespond_with
llamada. Eso es porque estoy usandoRABL como mi sistema de plantillas.
Así que la pregunta es: ¿Hay alguna posibilidad de hacerrescue_from
trabajar conMetal
o deshacerse de HTML de la respuesta?