Rails 3路由处理多个非必需参数

tim*_*one 2 ruby-on-rails ruby-on-rails-3

我正在将一个zend框架/ php应用程序移植到rails,并且有一组参数用于查询.

例如:

/locations/get-all-locations/lat/xxx.xxx/lng/xxx.xxx/radius/5/query/lemonade/updated_prev_hours/72
Run Code Online (Sandbox Code Playgroud)

但是可以提供这样的变化,例如省略查询或距离参数(即基本上可能需要在不同的集合中 - 另一个问题).似乎所有参数都需要命名.

最好是通过像这样的静态处理来处理这个问题:

match 'locations/get-all-locations/lat/:lat/lng/:lng/radius/:radius/query/:query/updated_prev_hours/:updated_prev_hours => 'locations#get_all_locations'
Run Code Online (Sandbox Code Playgroud)

这就是我需要的所有值,这些值将在params哈希中可用吗?或者是否有更好的策略来处理这样的复杂网址?

谢谢

Gaz*_*ler 6

看起来你的URL太深了,只是使用查询字符串会更合适.但是,如果您正在移植并且没有其他选项,那么您可以使用route globbing执行此操作.

就像是:

match "locations/get-all-locations/*options" => "locations#get_all_locations"
Run Code Online (Sandbox Code Playgroud)

然后,您可以执行以下操作来匹配这些:

Hash[*params[:options].split("/")]
Run Code Online (Sandbox Code Playgroud)

或者通过以下方式合并它们

params.merge!(Hash[*params[:options].split("/")])
Run Code Online (Sandbox Code Playgroud)