我需要Sinatra路由以下列方式运行:
GET /list/20/10 # Get 20 items with offset 10 GET /list/20 # Get 20 items with default offset GET /list # Get default number of items with default offset
我明白,我可能会将值作为查询传递:
GET /list?limit=20&offset=10
但是我想按照上面的描述传递它们.我很确定有办法向Sinatra / Padrino解释我想做什么,但我现在完全被困在了.我试过了:
get :list,:map => '/list',:with => [:limit,:offset] {} # 404 on /list get :list,:map => '/list/*' { puts params[:splat] } # 404 on /list get :list,:map => '/list/?:limit?/?:offset?' {} # 404 on /list get :list,:map => '/list' { redirect url_for(:list,…) } # 302,not convenient for consumers
我怎么能注意到Sinatra参数可能是可选的?
偶然,
get %r{/list(/[^/]+)*} do # parse params[:captures] end
有效,但看起来很傻.
解决方法
这个最小的例子:
#!/usr/bin/env ruby require 'sinatra' get '/test/?:p1?/?:p2?' do "Hello #{params[:p1]},#{params[:p2]}" end
适用于/ test,/ test / a和/ test / a / b.我错过了你的问题吗?