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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage