如何在葡萄的一个区块中创建两条路线?

我想在一个动作块中捕获2个类似的路线。 在Rails5中我可以轻松地做到这一点。 我首先声明这个:

get ':folder/:file' => 'get#index', :file => /.*/, :folder => /.*/ get ':file' => 'get#index', :file => /.*/ 

这允许我捕获:folder:folder一样多,可以像a/b/c/d...:file最后一个文件名。 第二个也允许我只捕获文件名。 两条路线都以同一行动为目标。

但是,在Grape中,因为它被声明为块而不是路由到方法定义,所以我必须写两次相同的块…

有没有办法在一个路由参数中同时捕获/as/many/folder/and/file.ext/file.ext ? 我尝试了可选参数,要求。 他们都没有工作。

我使用的原因:folder/:file (两次regexp)是我可以抓取:folder参数和:file参数分开而不手动拆分它们。

 get ':folder/:file', requirements: { file: /.*/, folder: /.*/ } do # params[:folder] and params[:file] end get ':file', requirements: { file: /.*/ } do # params[:file]. [:folder is empty.] end 

^^我想让他们成为一条路线。 如果文件夹存在(嵌套),那么它将在文件夹param中获取,否则文件夹将为nil。

好。 我通过尝试和寻找refdocs找到了答案。

 get '(:folder/):file', requirements: { folder: /.*/, file: /.*/ } do 

这按预期工作。