• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Rails中遇到错误跳转到统一提示错误页的方法

    一个迭代开发中的网站难免存在bug,出bug的时候客户体验就很不好了,为解决此问题,可以在class error产生的时候,触发跳转到统一提示页面,并给开发人员发邮件报错误信息,提高测试能力和用户体验。以下是核心方法;在ApplicationController中添加如下代码,不同rails版本的class error略有变化。

    复制代码 代码如下:

    AR_ERROR_CLASSES = [ActiveRecord::RecordNotFound, ActiveRecord::StatementInvalid] 
      ERROR_CLASSES = [NameError, NoMethodError, RuntimeError, 
             ActionView::TemplateError, 
             ActiveRecord::StaleObjectError, ActionController::RoutingError, 
             ActionController::UnknownController, AbstractController::ActionNotFound, 
             ActionController::MethodNotAllowed, ActionController::InvalidAuthenticityToken] 
     
      ACCESS_DENIED_CLASSES = [CanCan::AccessDenied] 
     
      if Rails.env.production? 
        rescue_from *AR_ERROR_CLASSES, :with => :render_ar_error 
        rescue_from *ERROR_CLASSES, :with => :render_error 
        rescue_from *ACCESS_DENIED_CLASSES, :with => :render_access_denied 
      end 
       
      #called by last route matching unmatched routes.  Raises RoutingError which will be rescued from in the same way as other exceptions. 
     
    #备注rails3.1后ActionController::RoutingError在routes.rb中最后加如下代码才能catch了。 
    #rails3下:match '*unmatched_route', :to => 'application#raise_not_found!' 
    #rails4下:get '*unmatched_route', :to => 'application#raise_not_found!' 
     
      def raise_not_found! 
        raise ActionController::RoutingError.new("No route matches #{params[:unmatched_route]}") 
      end 
     
      def render_ar_error(exception) 
        case exception 
        when *AR_ERROR_CLASSES then exception_class = exception.class.to_s 
        else exception_class = 'Exception' 
        end 
     
        send_error_email(exception, exception_class) 
      end 
     
      def render_error(exception) 
        case exception 
        when *ERROR_CLASSES then exception_class = exception.class.to_s 
        else exception_class = 'Exception' 
        end 
     
        send_error_email(exception, exception_class) 
      end 
     
      def render_access_denied(exception) 
        case exception 
        when *ACCESS_DENIED_CLASSES then exception_class = exception.class.to_s 
        else exception_class = "Exception" 
        end 
     
        send_error_email(exception, exception_class) 
      end

    上一篇:Ruby类继承、抽象类、类拓展混入、代理类实例
    下一篇:Ruby中Hash的11个问题解答
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Rails中遇到错误跳转到统一提示错误页的方法 Rails,中,遇到,错误,跳,转到,