如何在葡萄的一个区块中创建两条路线?
我想在一个动作块中捕获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
这按预期工作。