2011-09-27 4 views
2

Je suis en train de porter une application zend framework/php sur des rails et il y a un ensemble de paramètres pour quelque chose comme une requête.Rails 3 routes gérant plusieurs paramètres non requis

Par exemple:

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

pourrait fournir des variations, mais de cela comme laissant de côté la requête ou la distance paramenters (c.-à-essentiellement certains pourraient être nécessaires dans différents ensembles - une autre question). Il semblerait que tous les paramètres devraient être nommés.

Serait-ce mieux géré par un segement statique comme ceci:

match 'locations/get-all-locations/lat/:lat/lng/:lng/radius/:radius/query/:query/updated_prev_hours/:updated_prev_hours => 'locations#get_all_locations' 

Est-ce que tout ce que je besoin et les valeurs seront disponibles dans le hachage params? Ou existe-t-il une meilleure stratégie pour gérer des URL complexes comme celle-ci?

thx

Répondre

6

Cela ressemble vous allez trop profondément dans l'URL et simplement en utilisant la chaîne de requête serait plus approprié. Toutefois, si vous portez et n'avez pas d'autre option, vous pouvez le faire avec route globbing.

Quelque chose comme:

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

Vous pouvez alors correspondre à ceux-ci par faire:

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

Ou les fusionner en faisant:

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