Sinatra URL与问号匹配?

时间:2014-04-14 23:05:01

标签: ruby sinatra

有没有办法使用问号将网址与Sinatra匹配?

get '/:id?inspect' do
  # ...
end

get '/:id?last' do
  # ...
end

get '/:id' do
  # ...
end

我尝试转义问号\?,正则表达式等,但没有一个有效。

我不想检索inspectlast的值。我只想知道它们是否在网址中提供。

这可能吗?

2 个答案:

答案 0 :(得分:0)

标准路由不是由查询参数定义的,不应该是。为什么不在if路线的params上使用get /:id构造?

我还建议您在请求中设置查询参数时,将其设置为:/:id?inspect=true(提供虚拟值)

答案 1 :(得分:0)

你无法直接做你想做的事。在描述路线时,Sinatra将?视为定义可选参数,并没有提供逃避它的方法。

在网址中,?将路径与查询字符串分开,Sinatra仅在匹配路由时使用路径。查询字符串的内容在params中被解析并可用,原始字符串可用作request.query_string

您的网址方案似乎相当不寻常,但如果您想避免在实际路线中检查query_string,则可能是创建custom condition以应用于路线,并在那里办理登机手续:

set(:query) { |val| condition { request.query_string == val } }

get '/:id', :query => 'inspect' do
  # ...
end

get '/:id', :query => 'last' do
  # ...
end

get '/:id' do
  # ...
end