2010-08-09 3 views
1

여기 내 딜레마가 있습니다. 의미 론적으로 매우 다른 두 가지 유형의 경로가 있으며 다른 컨트롤러로 이동해야합니다.레일에서 모호한 경로 처리

ny/new-york/brooklyn/cleaners # should go to a list of cleaners for a neighborhood 
ny/new-york/cleaners/mrclean # should go to an individual cleaner's page 

참고 "브루클린"여기 "청소기는"단지 예입니다 것을. 앱에 많은 서비스 유형 (예 : '클리너')과 여러 지역이 있으므로 정규식으로 목록을 하드 코딩하고 두 경로를 구별하는 것은 불가능합니다.

ActiveRecord 모델에 액세스하는 임의의 방법을 라우팅 결정에 포함시킬 수 있습니까? 레일즈 2.3.8을 사용하고 있습니다.

답변

5

편집 :이 노선에 ActiveRecords를 사용하는 것이 가능 보인다이 blog entry 보면 동적 서비스

새 응답.

은 아마 당신은 같은 것을 할 수있는 : 이웃에 대한 경로 전에 여전히 특정 서비스에 대한 경로 이후 충돌을 방지한다

service_names = Service.all.map(&:short_name) # assuming the property 'short_name' is the value used in urls 
service_names.each do |service_name| 
    map.connect ':state/:city/#{service_name}/:company' :controller => ‘company’, :action => ‘show’ # to show the company's page 
    map.connect ':state/:city/:neighborhood/#{service_name}_finder' :controller => ‘company_finder’, :action => ‘find’ # to list the companies for the given service in a neighborhood 
end 

인을


오래된 나쁜 대답

다음 두 경로를 사용할 수 없습니까?

컨트롤러에서
map.connect ':state/:city/cleaners/:cleaner' :controller => ‘cleaners’, :action => ‘show’ # to show the cleaner's page 
map.connect ':state/:city/:neighborhood/cleaners' :controller => ‘cleaner_finder’, :action => ‘find’ # to list the cleaners of a neighborhood 

, 당신은 검색 할 수 있어야한다 : 상태 : [: 상태, PARAMS [: 도시] 도시와 다른 값이 PARAMS을 사용하여 퍼팅 등

의 : 주/: 도시/청소부/: 첫 번째 줄에있는 청소부는 모호함을 방지해야합니다.

+1

+1. Nitpick : 어떤 이유로 든, 이들은 다른 컨트롤러를 사용하기로되어 있습니다. – alternative

+0

고쳐 주셔서 감사합니다. – David

+0

참고 : "앱에 여러 가지 서비스 유형 (예 : '클리너')이 있으므로"클리너 "로 여기에서 수행 한 것처럼 하드 코딩 할 수 없습니다. – lawrence