在Sinatra路线中获取完整路径,包括问号后的所有内容

时间:2013-01-23 12:29:01

标签: ruby routing sinatra

我有以下路径:

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调用。我需要这样的字符串。

2 个答案:

答案 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