【问题标题】:Handling Unknown action in Rails 3在 Rails 3 中处理未知操作
【发布时间】:2011-09-21 09:01:19
【问题描述】:

我是 Rails 开发的新手,我有一个关于处理未知操作的问题。处理这种错误的最佳方法是什么?

【问题讨论】:

    标签: ruby-on-rails ruby error-handling


    【解决方案1】:

    不要处理它。如果用户输入错误的 URL,当您切换到生产环境时,他将收到 404 错误。

    您获得例外只是因为您处于开发环境中。

    【讨论】:

      【解决方案2】:

      显示 404 错误,用户输入了一个 URL,在该 URL 中您没有定义要处理的控制器(或路由)中的相应操作。它应该被视为用户输入example.com/controller/jbsandfodsafoiuaudsfbsadf87basdfgsadfdsa

      【讨论】:

        【解决方案3】:

        config/environments/development.rb 中,关闭consider_all_requests_local 并重新启动服务器。现在您将看到错误页面。完成设计后,重新打开 consider_all_requests_local 并重新启动服务器。

        在生产中,人们会得到您设计的 404 页面。在开发中,您可以看到堆栈跟踪,以便您可以调试自己的错误。

        【讨论】:

          【解决方案4】:

          您应该可以使用默认的 Rails 处理,它将在您的公共目录中加载 404 文件。

          【讨论】:

            【解决方案5】:

            在生产模式下,将自动处理异常。 但在某些情况下,我们想要处理异常。在我们的例子中,我们为这些页面呈现一个特殊的布局。

            在应用程序控制器中,您必须像这样拯救异常:

              PAGE_NOT_FOUND_ERRORS = ActiveRecord::RecordNotFound, ActionController::RoutingError, ActionController::UnknownAction, ActionController::UnknownController
              def rescue_action_in_public(exception)
                case exception
                when *PAGE_NOT_FOUND_ERRORS
                  render_404
                else
                  render_500
                end
              end
            
            
              def render_404
                render :file => File.join(RAILS_ROOT, 'public', '404.html'), :status => 404, :layout => true
              end
            
            
            
              def render_500
                render :file => File.join(RAILS_ROOT, 'public', '500.html'), :status => 500
              end
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-06-29
              • 1970-01-01
              • 2011-09-07
              • 2015-03-29
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多