2012-11-26 77 views
0

我试图设置保持请求格式的重定向。但是,在某些情况下,格式没有指定,我也需要说明。Rails 3与标记匹配的路由

我觉得格式是路径的一部分,所以在第一次我把它像这样...

match 'v:api/*path', :to => redirect("/%{path}") 

但是,格式不请求的一部分。因此,如果指定了格式,则将其更改为此将有效。

match 'v:api/*path', :to => redirect("/%{path}.%{format}") 

的缺点是在某些情况下,未指定格式,这将导致一个错误,因为它不能在格式相匹配。

所以我的问题是...什么是创建这个catchall的正确方法?

意图是,如果指定了版本号,该版本的路由不存在,它应该转到根路由,而不指定版本。

回答

0

好吧,我想我已经知道了。被预先警告,虽然它很丑...

match '/v:api/*path', to: redirect { |params, request| 
    if params[:format] 
    "/#{params[:path]}.#{params[:format]}" 
    else 
    "/#{params[:path]}" 
    end 
}