将整个路径指定为可选Rails 3.0.0

我想创建一个带有完全可选参数的Rails 3路由。 示例中断的路线是:

match '(/name/:name)(/height/:height)(/weight/:weight)' => 'people#index' 

这导致’rake:routes’屈服:

/(/名称/:名称)(/身高/:高度)(/重量/:重量)

从而为所有链接添加一个初始斜杠:

 ... 

如果我将其指定为:

 match '/people(/name/:name)(/height/:height)(/weight/:weight)' => 'people#index' 

但我希望将此作为根URL(与第一个示例一样,不起作用)。 谢谢。

我不知道这是否可以使用Rails的路由引擎完成,但是你可以在你的堆栈中添加一个自定义中间件,它应该可以正常工作。

把它放在lib/custom_router.rb

 class CustomRouter def initialize(app) @app = app end def call(env) if env['REQUEST_PATH'].match(/^\/(name|height|weight)/) %w(REQUEST_PATH PATH_INFO REQUEST_URI).each{|var| env[var] = "/people#{env[var]}" } end @app.call(env) end end 

并添加

  config.middleware.use "CustomRouter" 

到你的config/application.rb

然后,您可以设置路线

 match '/people(/name/:name)(/height/:height)(/weight/:weight)' => 'people#index' 

它会起作用。

如果使用单独的根映射,它是否有效?

 root :to => 'people#index' match '(/name/:name)(/height/:height)(/weight/:weight)' => 'people#index' 

在新的路由系统中,它似乎是一个非常重要的疏忽。

可能有办法通过机架中间件破解它(可能压倒Rack :: URLMap),但这有点超出了我的联盟。