9

sinatra时,我遇到了一个小问题:当我使用带有斜杠的参数时,它会混淆路由器引擎。那么有没有一种很好的方法来处理这种参数而无需对其进行编码?

代码看起来像

get 'add/:url' do
   #....
end

我打算让 /add/ http://sctackoverflow.com/ 之类的东西工作

4

3 回答 3

12

您是否尝试使用 splat 参数?

就像是:

get '/add/*' do
  protocol = params[:splat].first
  address = params[:splat][1..-1].join('/')

  url = protocol + "//" + address
end
于 2009-02-09T17:58:06.690 回答
3

谢谢,我还没有听说过 splat 参数,它非常适合这种情况。事实上,我查看了文档,发现使用捕获参数和正则表达式更短:

get %r{/add/(.+)} do
  url = params[:captures]
end
于 2009-02-09T22:28:22.017 回答
2

或使用:

url = request.fullpath[5..-1]
于 2010-12-29T14:58:12.607 回答