Ruby Sinatra URL是否与问号匹配?

Ruby Sinatra URL是否与问号匹配?,ruby,sinatra,Ruby,Sinatra,有没有办法使用问号将URL与Sinatra匹配 get '/:id?inspect' do # ... end get '/:id?last' do # ... end get '/:id' do # ... end 我试着避开问号\?,regex等,但都不起作用 我不想检索inspect或last的值。我只想知道它们是否在url中提供 可能吗 标准路由不是由查询参数定义的,因此不应使用。为什么不在get/:id路由中的params上使用if构造 我还建议,当您想要在请求中设置

有没有办法使用问号将URL与Sinatra匹配

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

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

get '/:id' do
  # ...
end
我试着避开问号
\?
,regex等,但都不起作用

我不想检索
inspect
last
的值。我只想知道它们是否在url中提供


可能吗

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


我还建议,当您想要在请求中设置查询参数时,您可以这样设置:
/:id?inspect=true
(提供一个虚拟值)

您不能直接执行您想要的操作。在描述路由时,Sinatra将
视为定义一个可选参数,而不提供一种逃避方法

在url中,一个
将路径与查询字符串分开,Sinatra仅在匹配路由时使用该路径。查询字符串的内容在
params
中解析并可用,原始字符串在
request.query\u string
中可用

您的url方案似乎很不寻常,但如果您想避免在实际路由中检查
查询字符串
,可以创建一个应用于路由的url方案,并在其中进行检查:

set(:query){| val | condition{request.query_string==val}
获取“/:id”,:query=>inspect'do
# ...
结束
获取“/:id”,:query=>“last”do
# ...
结束
获取“/:id”do
# ...
结束

我真的不明白-你问的问题和我问的一样吗?问题几乎是一样的,但上面链接中的正确答案只解释了URL路由是如何工作的,它没有回答问题。我想知道这是否可能以及如何实现。我知道问号是一个URL分隔符,我试图将其转义,但没有成功。那么您想根据查询字符串的内容进行路由吗?比如检查
请求。在
if
语句中查询字符串,但使用单独的路由?是的!如果
,我不想做
。我想使用Sinatra路由器处理程序为我做这件事。为什么不呢?我更喜欢使用特定的方法(块)来处理参数,而不是在全局方法中使用显式的
if
?last
?inspect
不是资源,它们不需要有一个特定的url,它们只是同一个资源url的选项,但由于它们在我的用例中有不同的表示形式,我宁愿有特定的方法(block)让Sinatra根据url处理条件。这是对aledalgrande的评论。省略“=true”部分是有原因的,因为它对于用户来说更容易键入。我刚刚有一个“?”的用例;我想添加:“to_dna?source”,以在第页中显示源代码。to_dna转换已经起作用了,所以我想要一个简单的用户解释。使用诸如“to_dna?source=true”这样的URL是没有意义的。虽然我想我们可能没有提到完全相同的东西,因为您使用的:可能指的是ruby中的处理,而不是参数传递——但这就是threadstarter所指的。我有一个类似的用例。