【问题标题】:How to handle route not found within a namespace in Rails?如何处理在 Rails 命名空间中找不到的路由?
【发布时间】:2019-06-06 06:45:13
【问题描述】:

我正在尝试通过公共 API 公开我们的应用程序。我已将 API 代码编写为引擎并将其安装在我的应用程序上。

假设我已经定义了一个路由/api/users,它将由我创建的 API 引擎处理。

我们还在路由定义的末尾定义了一个通用路径,它处理所有其他路由,因为我们使用了前端框架。

如果用户将公共 API 拼错为 /api/user-detail,则会在定义的通用路径中进行处理。

routes.rb

mount FtApi::Engine => "/api"
match "*a", controller: :assets, action: :index, via: [:get, :post, :patch]

我想处理引擎内命名空间api下的任何未定义路由错误,但路径被通配符路由控制器捕获。

如何在定义的 Rails 引擎中处理命名空间api 下的未定义路由错误?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5


    【解决方案1】:

    您可以通过应用基于请求的约束来停止使用通配符捕获任何随机路由。

    更多信息请看这里Request Based ConstraintsAdvanced Constraints

    看看下面给出的代码。尚未对此进行测试,但这是一个如何在路由中添加约束的示例。

    match "*a", controller: :assets, action: :index, constraints: RouteConstraint.new, via: [:get, :post, :patch]
    

    然后在约束或初始化器中添加这段代码

    class RouteConstraint
      def matches?(request)
        not request.path.include?('api')
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多