我有以下路径:
http://192.168.56.10:4567/browse/foo/bar?x=100&y=200
我绝对想要在“http://192.168.56.10:4567/browse/”字符串中之后的所有内容。
使用splat不起作用(仅捕获“foo / bar”):
get '/browse/*' do
正则表达式(也只捕获“foo / bar”):
get %r{/browse/(.*)} do
x和y参数都可以在params散列中访问,但对我想要的那些做一个.map似乎是不合理的和非ruby一样的(同样,这只是一个例子......我的参数实际上是非常动态的和许多)。有更好的方法吗?
更多信息:我的路径看起来是这样的,因为它正在与API通信,我使用该路由来确定我将进行的API调用。我需要这样的字符串。
答案 0 :(得分:5)
如果您愿意忽略路径参数中的哈希标记,这应该可行(BTW浏览器会在URL中散列后忽略任何内容)
更新了答案
get "/browse/*" do
p "#{request.path}?#{request.query_string}".split("browse/")[1]
end
甚至更简单
request.fullpath.split("browse/")[1]
答案 1 :(得分:1)
get "/browse/*" do
a = "#{params[:splat]}?#{request.env['rack.request.query_string']}"
"Got #{a}"
end