0

我目前有 6 个控制器,并不是每个人都定义了所有 6 个动作。我希望将所有未定义的操作路由到 root_url,这样我们就没有那个丑陋的错误消息,但无法找到一种方法来做到这一点。谁能帮我吗?

4

2 回答 2

1

正如其他人在评论中指出的那样,您可能实际上并不想做您所要求的事情,但是,既然您提出了要求,您正在寻找的解决方案就是在您的ApplicationController.

unless Rails.application.config.consider_all_requests_local
  rescue_from AbstractController::ActionNotFound, with: :handle_error
  rescue_from ActiveRecord::RecordNotFound, with: :handle_error
  rescue_from ActionController::RoutingError, with: :handle_error
  rescue_from ActionController::UnknownController, with: :handle_error
  rescue_from ActionController::UnknownAction, with: :handle_error
end

protected
def handle_error
  redirect_to root_url
end

这基本上会捕获有关丢失的路由、控制器和操作的所有错误,并重定向到 root_url。因为它在你的 ApplicationController 中,你所有的其他控制器都是从它派生的,所以它适用于你所有缺失的东西。

请注意,因为我在其中包含了这些救援,除非,您仍然会在本地开发人员中看到您想要的错误,以便您可以处理任何实际问题。

同样,您最好在不同的错误类型(如 404、500 等)周围放置一些自定义页面,然后重定向用户或让他们自己导航。

从 rails 3.2 开始,您甚至可以将这些错误定向到特定的机架端点(包括应用程序本身)并根据需要处理它们。这比上面的解决方案要好得多,但仅适用于 rails 3.2 或更高版本。对于旧版本,上述解决方案将起作用。

为此,您需要将此行添加到您的 application.rb

config.exceptions_app = self.routes

然后,在您的路线文件中,您可以执行以下操作:

match '/404', to: "error_pages#handle_404"

这期望您拥有一个带有 handle_404 操作的 ErrorPages 控制器,但您也可以将其路由到任何地方,包括您的 root_url,无论是什么。您可以对所有错误代码执行此操作。

于 2013-05-28T05:01:07.050 回答
0

在每个控制器的未定义动作中,只需编写:

redirect_to root_url
于 2013-05-28T02:25:07.493 回答