【发布时间】:2017-09-08 15:54:35
【问题描述】:
我有以下路由规则可以捕获一些“错误”的 HTTP 状态并将用户重定向到错误页面:
%w[403 404 422 500 503].each do |code|
match code, to: 'errors#show', code: code, via: :all
end
我还有一个根命名空间和另一个用于“管理员”的命名空间。我想让同样的路由匹配对 admin 命名空间起作用,所以我向它添加了相同的路由规则:
namespace :admin do
%w[403 404 422 500 503].each do |code|
match code, to: 'errors#show', code: code, via: :all
end
end
问题:它不起作用,所有 403 请求都被重定向到 /403 而不是 /admin/403。有没有办法实现这个目标?
我想这样做是因为我需要为错误页面使用 不同的布局 以通过 application 布局以及 admin 来显示它们 布局。
【问题讨论】:
-
您需要告诉 Rails 将您的路线用作例外应用程序 - 将
config.exceptions_app = self.routes添加到config/application.rb。 mattbrictson.com/dynamic-rails-error-pages -
我没有很好地解释自己。我已经这样做了。路由正在工作,但仅适用于根命名空间。它不适用于命名空间管理员。
-
我真的不认为这是可能的。 Rails 只会调用一个异常应用程序,并且不会真正映射到您对命名空间的想法。当 rails 处理异常时,它并不关心它是否源自您的命名空间。
-
您可以通过在管理界面使用不同的 Rails 应用程序来解决它。但是用好的 UI 设计来解决它可能会更简单。
标签: ruby-on-rails namespaces http-status-codes