我想在一个 Action block 中捕捉 2 条相似的路线。在 Rails5 中,我可以轻松做到这一点。我首先声明:
get ':folder/:file' => 'get#index', :file => /.*/, :folder => /.*/
get ':file' => 'get#index', :file => /.*/
这让我可以捕获 :folder
尽可能多的文件夹可以像 a/b/c/d...
和 :file
最后一个文件名。第二个也允许我只捕获文件名。 并且两条路线都针对相同的操作。
但是,在 Grape 中,因为它被声明为 block 而不是路由到方法定义,所以我必须编写相同的 block 两次...
有没有办法在一个路由参数中同时捕获 /as/many/folder/and/file.ext
和 /file.ext
?我尝试了可选参数,要求。它们都不起作用。
我使用 :folder/:file
(两次正则表达式)的原因是我可以分别获取 :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
^^ 我想让他们成为一条路线。如果文件夹存在(嵌套),那么它将在文件夹参数中抓取,否则文件夹将为零。
最佳答案
好的。我通过尝试并查看 refdocs 找到了答案。
get '(:folder/):file', requirements: { folder: /.*/, file: /.*/ } do
这按预期工作。
关于ruby-on-rails - 如何在一个葡萄 block 中创建两条路线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49061979/