ruby-on-rails - 如何在一个葡萄 block 中创建两条路线?

标签 ruby-on-rails ruby ruby-grape grape-api

我想在一个 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/

相关文章:

ruby-on-rails - 如何从 Ruby 与 CalDAV 服务器交互?

ruby-on-rails - 升级到 Rails 5 : NoMethodError (undefined method `id' for {}:Hash) 时出现新错误

ruby - 在 cucumber 中使用 capybara 点击图像

ruby-on-rails - 回形针:发现以下错误:图像的内容与报告的内容不同

ruby - 将 Hashie::Mash 输出解析为 ruby​​ 中的 Json

css - 如何使用 Nokogiri 获取列表中的第二张图片?

javascript - 基本的javascript;点击提醒

ruby-on-rails - 在过滤器为整个 Controller 分配异常之前

java - 摩擦正则表达式 : matching a char except when after by another char

ruby-on-rails - 葡萄救援 Grape::Exceptions::ValidationErrors 不起作用