문제

그래서 우리는 "Europe/France/Paris"와 같은 ID를 가진 장소를 추적하는 레거시 시스템을 가지고 있으며, http : // foobar/places/Europe/France/Paris와 같은 URL로 전환하기 위해 레일 외관을 만들고 있습니다. 이 요구 사항은 협상 할 수 없으며, 가능한 수준의 수는 무제한이며 슬래시를 피할 수 없습니다.

ROPES.RB 설정 http : // foobar/places/Europe 사소한 것 :

map.resources :places

... 그러나 http : // foobar/places/Europe/France는 "유럽에 대한 조치 없음"이라고 불평합니다. 나는 시도했다 :

map.connect '/places/:id', :controller => 'places', :action => 'show' 

... 그러나 이것은 분명히 다음과 같은 결과를 제공합니다. ID는 첫 번째 '/'에서 끝납니다. "장소"이후 신분증을 어떻게 커버하고 모든 것을 커버하려고합니까?

도움이 되었습니까?

해결책

전체 문서에 대한 라우팅 안내서를 살펴보십시오.

http://guides.rubyonrails.org/routing.html

구체적으로 "4.9 Route Globbing"섹션.

하지만 당신이 정말로하고 싶은 것은 다음과 같이 당신의 경로를 선언하는 것입니다.

map.connect '/places/*id', :controller => 'places', :action => 'index'

URL과 같은 호출

/places/foo/bar/1

Yields a params[:id] => ["foo", "bar", "1"]

"/"와 쉽게 가입하여 "foo/bar/1"을 원하는 전체 문자열을 생성 할 수 있습니다 (아마도 선행 슬래시를 수동으로 다시 삽입해야 할 것입니다.

그것은 당신을 가야합니다.

다른 팁

나는 이것을 생각해 내기 위해 Cody의 대답을 약간 조정했다.

map.place '/places/*id', :controller => 'places', :action => 'show'
map.connect '/places/*id.:format', :controller => 'places', :action => 'show'

Map.connect 대신 Map.Place를 사용하면 Rails는 우리가 처리하고 생성 한 자원을 알고 있습니다. place_url, place_path 등이 올바르게 도우미.

이제 두 번째 라인 ~해야 한다 위의 버그 덕분에 작동하지 않으므로 여기에 ID를 수동으로 나누고 형식을 설정하여 XML로 기본값을 설정하는 Places_Controller.rb의 해결 방법이 있습니다.

id, suffix = params[:id].join('/').split('.') 
params[:format] = suffix ? suffix : "xml"
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top