2017-09-08 68 views
0

我有以下的路由规则,将捕捉到的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。有没有办法实现这个目标?

我想要做这样的,因为我需要使用的错误页面不同的布局应用布局也与管理布局,以显示它们。

+1

你需要告诉导轨使用路由作为异常应用程序 - 将'config.exceptions_app = self.routes'添加到'config/application.rb'。 https://mattbrictson.com/dynamic-rails-error-pages – max

+0

我没有解释自己很好。我已经做到了。路由正在工作,但仅限于根名称空间。它不适用于命名空间管理员。 – RafaelTSCS

+0

我并不认为这是可能的。 Rails只会调用一个例外应用程序,并没有真正映射到您对命名空间的想法。当rails处理异常时,它并不关心它是否源自你的名字空间。 – max

回答

0

您应该使用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代码转向更以干重设置的