2017-09-08 2 views
0

I가 약간의 '오류'에 대한 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 개 요청을 리디렉션되고있다 /admin/403 대신 /403으로 변경하십시오. 이 목표를 달성 할 수있는 방법이 있습니까?

나는 내가 응용 프로그램 레이아웃 또한 관리자 레이아웃을 보여 오류 페이지 다른 레이아웃를 사용할 필요가 있기 때문에 이런 식으로하고 싶지.

+1

당신이 사용하는 레일을 말할 필요가 DRY 설정의 이상으로 모두 오류 컨트롤러 사이의 DUP 코드를 이동 "우려"로 봐 당신의 라우트를 예외 어플리케이션으로 사용하려면'config.exceptions_app = self.routes'를'config/application.rb'에 추가하십시오. https://mattbrictson.com/dynamic-rails-error-pages – max

+0

나는 나 자신을 아주 잘 설명하지 않았다. 벌써 했어. 라우팅은 작동하지만 루트 네임 스페이스에 대해서만 작동합니다. 네임 스페이스 admin에서는 작동하지 않습니다. – RafaelTSCS

+0

나는 이것이 가능하다고 생각하지 않는다. 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 

편집 :