如何处理在Rails的命名空间中找不到的路由?

时间:2019-06-06 06:45:13

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

我正在尝试通过公共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下处理未定义的路由错误?

1 个答案:

答案 0 :(得分:3)

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

有关更多信息,请在这里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