2011-06-14 2 views
1

나는 admin 섹션과 public 섹션이있는 레일 앱을 개발 중입니다. 공공 부분에서 나는이 '새'의 ID로 show 액션에 해결하는 새로운 조치에 대해 표준 URL을 칠 경우에만 인덱스와 쇼 루트레일 경로를 해결하는 것을 피하는 방법은 무엇입니까?

그러나
resources :services, :only => [:index, :show] 

를 해결하고자합니다. 즉 http://foo.com/services/new은 "ID가있는 서비스를 찾을 수 없습니다 = 새"오류를 반환합니다. 어쨌든 레일에/서비스/새로운 문제를 해결하지 말라고 말할 수 있습니까?

이미 성공하지

resources :services, :only => [:index, :show], :except => :new 

resources :services, :except => :new, :only => [:index, :show] 

을 시도했습니다. 내 전체 경로 파일 (산세 코멘트) : (요청에 의해)

ETA

MyApp::Application.routes.draw do 
    resources :services, :only => [:index, :show] 
    resources :packages,:only => [:index, :show] 

    get "pages/home" 
    get "pages/about" 
    get "pages/help" 

    root :to => 'packages#index' 

    namespace "admin" do 
    get "pages/home" 
    get "pages/about" 
    get "pages/help" 

    resources :services 
    match "/services/:id/add_to_package/:package_id" => "services#add_package",  :as => :add_package_to_service,  :via => :post, :id => /\d+/, :package_id => /\d+/ 
    match "/services/:id/remove_from_package/:package_id" => "services#remove_package", :as => :remove_package_from_service, :via => :post, :id => /\d+/, :package_id => /\d+/ 

    resources :packages 
    match "/packages/:id/add_service/:service_id" => "packages#add_service",  :as => :add_service_to_package,  :via => :post, :id => /\d+/, :service_id => /\d+/ 
    match "/packages/:id/remove_service/:service_id" => "packages#remove_service", :as => :remove_service_from_package, :via => :post, :id => /\d+/, :service_id => /\d+/ 

    resources :users 

    root :to => 'pages#home' 
    end 
end 
+0

일반적으로 URL을 고려하기 때문에 라우트 파일이나 컨트롤러에서'redirect'를 사용합니다 – apneadiving

+0

전체 라우트 파일을 게시 할 수 있습니까? – moritz

+0

어쩌면 나는 이것을 잘못된 길로보고있을 것이지만, "길을 찾지 않으면"404를 반환한다는 뜻인가요? 프로덕션 모드에서 Service.find (params [: id])를 수행하면 "ID가 새 인 서비스를 찾을 수 없습니다"라는 메시지가 404로 바뀌므로 동일한 기본 목적을 제공합니다. 이 페이지가 존재하지 않는다는 것을 세상에 알리는 것. – icecream

답변

1

당신은 당신의 :id PARAM에 제약을 가하고에 시도 할 수

resources :services, :constraints => {:id => /\d+/}, :only => [:index, :show] 

이것은 당신의 :id 가정한다 모두 숫자 기반입니다.

리디렉션과 리소스 충돌과 비슷한 상황이 있었지만 해결되었습니다.

+0

나는이 애비뉴를 계속 추구 할 것이라고 생각하지만 번호와 텍스트 ID를 다루는 것이 두렵다. – Chris

+0

나는 음수가있는 해결책이 있다고 생각했다. look-ahead matching'resources : services, : constraints => {: id =>/(?! new) \ w + /}, : only => [: index, : show]'그러나 트릭을하지는 않습니다. 콘솔에서 작업을 수행 할 수는 있지만 시작/끝 앵커 만 사용합니다.이 앵커는 어떤 이유로 경로 일치에 허용되지 않습니다. – Chris

관련 문제