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方法(参见源代码)。AbstractController::BaseAbstractController::ActionNotFound

于 2015-04-01T14:27:04.347 回答
0

我想我们应该赶上AbstractController::ActionNotFoundApplicationController我试过以下似乎不起作用

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

解决方案改编自:coderwall 处理 Rails 应用程序中的异常

于 2017-03-07T08:15:23.850 回答
0

正如 Grégoire 在他的回答中所描述的那样,覆盖process似乎有效。但是,Rails 代码说要改用 override process_action。但是,这不起作用,因为process_action由于在process.

https://github.com/rails/rails/blob/v3.2.21/actionpack/lib/abstract_controller/base.rb#L115

https://github.com/rails/rails/blob/v3.2.21/actionpack/lib/abstract_controller/base.rb#L161

于 2017-10-10T20:14:59.510 回答