2013-03-20 1 views
0

우리는 대형 웹 앱을 업데이트하고 URL 동의어 시스템을 제거합니다. 예를 들어, '광고주'에 대해 하나의 모델 만 사용하더라도 동의어 경로를 사용하여 '판매자'및 '판매자'에게 별칭을 지정합니다. 따라서/merchant/1 및/seller/1은 광고주/1과 동일한 정확한 컨트롤러 및 작업을 사용합니다.Rails 3 경로에서 재귀 적으로 방향을 바꿈

더 이상이 기능이 필요하지 않지만 이전 URL을 사용하여 사용자를 적절한 장소 (즉, 적절한 컨트롤러 동작)로 올바르게 리디렉션해야합니다.

는 지금까지, 나는 시도했다 :

1) 읽기 http://guides.rubyonrails.org/routing.html - 이것은 다음과 같은 제안

2) 일치를 시도하는 저를 이끌 '/ 상인'=> ('/ 광고주')를 재 - 이 구문은 올바른 것처럼 보이지만 전혀 작동하지 않는 것 같습니다.

3) 자원 반복 (이 경로의 톤을 생산하고 불안을 일으킬 수) :

ADVERTISER_SYNONOYMS = ['affiliates', 'sellers'] 

ADVERTISER_SYNONYMS.each do |a| 
    resources :advertisers, :path => a, :as => :advertiser 
    resources :other_controller do 
     member do 
     get :test 
     match :generate_test 
     end 
    end 
    end 
end 

우리는 우리의 routes.rb에 중첩 된 자원을 사용하기 때문에 내가 할이 synonymns을 받고와 사투를 벌인거야 더 복잡한 URL 전체에서 모두 인식됩니다. 누구든지이 문제를 다루거나보다 훌륭한 제안을한다면, 나는 가장 감사 할 것입니다.

답변

0

시도한 것처럼 routes.rb에 추가 경로를 포함하여 처리하거나 아파치 또는 Nginx와 같은 웹 서버 수준에서 다시 작성하는 방법은 여러 가지가 있습니다.

좋아하는 한 가지 해결책은 rack-rewrite 보석입니다. 그것은 경로를 깨끗하게 유지하고 규칙은 평범한 루비입니다. 다시 쓰기 및 리디렉션을 구성하는 방법을 제공합니다. 상황에 따라 영구적 인 리디렉션을 사용하고 싶습니다. 직접 테스트하지는 않았지만 다음과 같은 것이 유용 할 수 있습니다.

# Gemfile 
gem 'rack-rewrite' 

# application.rb 
config.middleware.use(Rack::Rewrite) do 
    r301 %r{/merchant|seller/(\w+)}, '/advertiser/$1' 
end 
관련 문제