Behandlung von ActiveRecord :: RecordNotFound mit ActionController :: Metal
Ich bin in der Entwicklungsphase (JSON) der API und entscheide mich, meine zu erbenApiController
vonActionController::Metal
Geschwindigkeit ausnutzen usw.
Deshalb habe ich eine Reihe von Modulen hinzugefügt, damit es funktioniert.
Vor kurzem habe ich beschlossen, mit leerem Ergebnis zu antworten, wenn der Datensatz nicht gefunden wird. Rails wirft schonActiveRecord::RecordNotFound
vonModel#find
Methode und ich habe versucht zu verwendenrescue_from
um es zu fangen und so etwas zu schreiben:
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
Nach dem Anruf meine einfache Aktion
def show
@post = Post.find(params[:id])
end
Und die Hinrichtung nie erreichenrescue_from
. Es wirft:
ActiveRecord::RecordNotFound (Couldn't find Post with id=1
in meine Logdatei.
Ich habe es versucht und im Produktionsmodus. Der Server antwortet mit 404, der Antworttext ist jedoch StandardHTML Fehlerseite fürJSON anfordern.
Es funktioniert gut, wenn ich die Vererbung von ändereActionController::Metal
zuActionController::Base
.
Sie können über Mangel an bemerkenrespond_with
Anruf. Das ist, weil ich benutzeRABL als mein vorlagensystem.
Die Frage ist also: Gibt es irgendwelche Chancen zu machenrescue_from
arbeiten mitMetal
oder HTML von der Antwort loswerden?