Obsługa ActiveRecord :: RecordNotFound z ActionController :: Metal

Jestem na etapie rozwoju API (JSON) i postanawiam odziedziczyć mojeApiController zActionController::Metal czerpać korzyści z prędkości itp.

Więc załączyłem kilka modułów, aby to działało.

Ostatnio zdecydowałem się odpowiedzieć pustym wynikiem, gdy nie znaleziono rekordu. Szyny już rzucająActiveRecord::RecordNotFound zModel#find metoda i próbowałem użyćrescue_from złapać go i napisać coś takiego:

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  

Po wywołaniu mojej prostej akcji

def show
  @post = Post.find(params[:id])
end

A wykonanie nigdy nie docierarescue_from. To rzuca:

ActiveRecord::RecordNotFound (Couldn't find Post with id=1

do mojego pliku dziennika.

Próbowałem tego i w trybie produkcji. Serwer odpowiada 404, ale treść odpowiedzi jest standardemHTML strona błędu dlaJSON żądanie.

Działa dobrze, gdy zmieniam dziedziczenieActionController::Metal doActionController::Base.

Możesz zauważyć o brakurespond_with połączenie. To dlatego, że używamRABL jako mój system szablonów.

Więc pytanie brzmi: czy są jakieś szanse na zrobienierescue_from pracować zMetal lub pozbyć się kodu HTML z odpowiedzi?

questionAnswers(1)

yourAnswerToTheQuestion