如何将所有未定义的操作路由到Rails中的root_url?

时间:2013-05-28 02:22:13

标签: ruby-on-rails ruby routes

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

2 个答案:

答案 0 :(得分: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,无论是什么。您可以对所有错误代码执行此操作。

答案 1 :(得分:0)

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

redirect_to root_url