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?