3

私は開発中 (JSON) API の段階にあり、速度などを利用するために継承することにApiControllerしました。ActionController::Metal

だから私はそれを機能させるためにたくさんのモジュールを含めました。

最近、レコードが見つからない場合は空の結果で応答することにしました。RailsはすでにメソッドActiveRecord::RecordNotFoundからスローしており、それをキャッチして次のようなものを書くために使用しようとしています:Model#findrescue_from

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  

私の単純なアクションを呼び出した後

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

そして実行は決して到達しませんrescue_from。それはスローです:

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

私のログファイルに。

私はそれを試しており、本番モードで使用しています。サーバーは 404 で応答しますが、応答本文はJSON要求の標準のHTMLエラー ページです。

ActionController::Metal継承を からに変更するとうまくいきますActionController::Base

respond_with通話がないことに気付くかもしれません。これは、テンプレート システムとしてRABLを使用しているためです。

rescue_from質問は次のとおりです。HTML を使用したり、応答から HTML を削除しMetalたりする可能性はありますか?

4

1 に答える 1