9

次のコードがあります。

unless Rails.application.config.consider_all_requests_local
  rescue_from Exception, with: :render_exception
  rescue_from ActiveRecord::RecordNotFound, with: :render_exception
  rescue_from ActionController::UnknownController, with: :render_exception
  rescue_from ::AbstractController::ActionNotFound, with: :render_exception
  rescue_from ActiveRecord::ActiveRecordError, with: :render_exception
  rescue_from NoMethodError, with: :render_exception
end

::AbstractController::ActionNotFound を除いて、それらはすべて問題なく動作します

私も試してみました

AbstractController::ActionNotFound
ActionController::UnknownAction

エラー:

   AbstractController::ActionNotFound (The action 'show' could not be found for ProductsController):
4

4 に答える 4

7

この同様の質問ActionNotFoundは、例外をキャッチできなくなったことを示唆しています。回避策については、リンクを確認してください。Rack ミドルウェアを使用して 404 をキャッチするというこの提案は、私にとって最もクリーンに見えます。

于 2012-11-17T17:45:14.070 に答える
3

コントローラーでレスキューAbstractController::ActionNotFoundするには、次のようなことを試すことができます。

class UsersController < ApplicationController

  private

  def process(action, *args)
    super
  rescue AbstractController::ActionNotFound
    respond_to do |format|
      format.html { render :404, status: :not_found }
      format.all { render nothing: true, status: :not_found }
    end
  end


  public

  # actions must not be private

end

これは、レイズのprocessメソッドをオーバーライドします( sourceを参照)。AbstractController::BaseAbstractController::ActionNotFound

于 2015-04-01T14:27:04.347 に答える
0

AbstractController::ActionNotFoundに追いつくべきだと思いますApplicationController。私は次のことを試しましたが、うまくいかないようです。

rescue_from ActionController::ActionNotFound, with: :action_not_found

でこの例外を処理するためのよりクリーンな方法を見つけましたApplicationController。アプリケーションで例外を処理するには、アプリケーション コントローラーでメソッドActionNotFoundをオーバーライドする必要があります。action_missing

def action_missing(m, *args, &block)
  Rails.logger.error(m)
  redirect_to not_found_path # update your application 404 path here
end

ソリューションの適応元: Rails アプリケーションでの coderwall 処理例外

于 2017-03-07T08:15:23.850 に答える