Ruby Sinatra URL是否与问号匹配?
有没有办法使用问号将URL与Sinatra匹配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构造 我还建议,当您想要在请求中设置
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所指的。我有一个类似的用例。