2011-09-27 2 views
2

zend framework/php 앱을 레일에 이식하고 있으며 쿼리와 같은 매개 변수 집합이 있습니다. 예를 들어레일 여러 개의 필수가 아닌 매개 변수를 처리하는 3 개의 경로

:

/locations/get-all-locations/lat/xxx.xxx/lng/xxx.xxx/radius/5/query/lemonade/updated_prev_hours/72 

하지만, 쿼리 또는 거리 4. 기본값을 떠나처럼이의 변화를 제공 할 수있다 (즉, 기본적으로 일부는 다른 세트에서 요구 될 수있다 - 다른 질문). 모든 매개 변수의 이름을 지정해야하는 것처럼 보일 것입니다.

이 가장 잘 같은 정적 segement에 의해 처리 될 것이다 :
match 'locations/get-all-locations/lat/:lat/lng/:lng/radius/:radius/query/:query/updated_prev_hours/:updated_prev_hours => 'locations#get_all_locations' 

내가 필요하고 값이 PARAMS 해시에 제공 될 예정인가요? 아니면 이와 같은 복잡한 URL을 처리하기위한 더 나은 전략이 있습니까?

들으 당신이 URL에 너무 깊이 가서 간단하게 쿼리 문자열이 더 적합 할 것이다 사용하는 것처럼이 보이는

답변

6

. 그러나 포팅 중이며 다른 옵션이 없다면 route globbing으로이 작업을 수행 할 수 있습니다.

뭔가 같은 :

Hash[*params[:options].split("/")] 

또는 수행하여 병합 :

match "locations/get-all-locations/*options" => "locations#get_all_locations" 

그런 다음 수행하여 다음을 일치시킬 수 있습니다

params.merge!(Hash[*params[:options].split("/")]) 
관련 문제