命名空间“错误页面” Rails中
问题描述:
我有以下的路由规则,将捕捉到的HTTP状态对于一些“错误”,并把用户重定向到错误页面:命名空间“错误页面” Rails中
%w[403 404 422 500 503].each do |code|
match code, to: 'errors#show', code: code, via: :all
end
我也有根命名空间和另一个'管理'。我想,以便为管理员命名此相同的路线匹配的工作,所以我加了相同的路由规则吧:
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。有没有办法实现这个目标?
我想要做这样的,因为我需要使用的错误页面不同的布局与应用布局也与管理布局,以显示它们。
答
您应该使用diff命名空间errors
控制器。你可以做一些像rails generate scaffold_controller admin::errors
。然后设置你的路由,以便使用新的命名空间的控制器:
Rails.application.routes.draw do
root 'home#index'
%w[403 404 422 500 503].each do |err|
match err, to: 'errors#show', code: err, via: :all
end
namespace :admin do
%w[403 404 422 500 503].each do |err|
match err, to: 'admin/errors#show', code: err, via: :all
end
end
end
编辑:看成了“关注”两个错误控制器之间DUP代码转向更以干重设置的
你需要告诉导轨使用路由作为异常应用程序 - 将'config.exceptions_app = self.routes'添加到'config/application.rb'。 https://mattbrictson.com/dynamic-rails-error-pages – max
我没有解释自己很好。我已经做到了。路由正在工作,但仅限于根名称空间。它不适用于命名空间管理员。 – RafaelTSCS
我并不认为这是可能的。 Rails只会调用一个例外应用程序,并没有真正映射到您对命名空间的想法。当rails处理异常时,它并不关心它是否源自你的名字空间。 – max