rescue_from ActionController::RoutingError in Rails 4

后端 未结 3 1674
甜味超标
甜味超标 2020-11-27 06:27

I\'ve got the following error:

ActionController::RoutingError (No route matches [GET] \"/images/favicon.ico\")

I want to show error404 page

3条回答
  •  暗喜
    暗喜 (楼主)
    2020-11-27 06:54

    In application_controller.rb add the following:

      # You want to get exceptions in development, but not in production.
      unless Rails.application.config.consider_all_requests_local
        rescue_from ActionController::RoutingError, with: -> { render_404  }
      end
    
      def render_404
        respond_to do |format|
          format.html { render template: 'errors/not_found', status: 404 }
          format.all { render nothing: true, status: 404 }
        end
      end
    

    I usually also rescue following exceptions, but that's up to you:

    rescue_from ActionController::UnknownController, with: -> { render_404  }
    rescue_from ActiveRecord::RecordNotFound,        with: -> { render_404  }
    

    Create the errors controller:

    class ErrorsController < ApplicationController
      def error_404
        render 'errors/not_found'
      end
    end
    

    Then in routes.rb

      unless Rails.application.config.consider_all_requests_local
        # having created corresponding controller and action
        get '*path', to: 'errors#error_404', via: :all
      end
    

    And the last thing is to create not_found.html.haml (or whatever template engine you use) under /views/errors/:

      %span 404
      %br
      Page Not Found
    

提交回复
热议问题