Ruby on rails Rails多个异常处理程序,带有;例外情况“应用程序”;每路由命名空间

Ruby on rails Rails多个异常处理程序,带有;例外情况“应用程序”;每路由命名空间,ruby-on-rails,exception,versioning,Ruby On Rails,Exception,Versioning,是否有任何解决方案可以处理每个路由名称空间的Rails异常,并定义方向config.exceptions\u app 我已经对界面进行了版本控制,例如/api/v1,/api/v2。每个名称空间使用不同的JSON/XML/HTML响应结构 全局定义很好,但我需要更动态的东西 解决: config.exceptions\u应用程序关闭/lambda块。在该块中,我可以创建如下简单的case语句: config.exceptions_app = lambda do |env| case env[

是否有任何解决方案可以处理每个路由名称空间的Rails异常,并定义方向
config.exceptions\u app

我已经对界面进行了版本控制,例如
/api/v1
/api/v2
。每个名称空间使用不同的JSON/XML/HTML响应结构

全局定义很好,但我需要更动态的东西

解决:

config.exceptions\u应用程序
关闭/lambda块。在该块中,我可以创建如下简单的
case
语句:

config.exceptions_app = lambda do |env|
  case env['REQUEST_PATH']
  when %r{^(\/api\/v1)}
    Api::V1::ExceptionsController.action(:show).call(env)
  when %r{^(\/api\/v2)}
    Api::V2::ExceptionsController.action(:show).call(env)
  when %r{^(\/cms\/)}
    Cms::ExceptionsController.action(:show).call(env)
  end
end
你调查过了吗?它允许您捕获控制器内的所有异常(给定类型),并按照您的意愿呈现它们。您可以子类化并覆盖
调用
方法,以使用
请求
对象中的路径信息来获得更大的动态性。如果你想呈现不同的静态文件,你必须同时覆盖
呈现html
,并使用一些更动态的东西,而不仅仅是
公共路径

没有你更多的投入,就无法给出更详细的答案。

啊,老好人的救命稻草。我已经忘了。我试试看。给出响应我使用了exception_应用程序,但将regex用于不同的命名空间路由。ActionDispatch::PublicExceptions看起来像是全局性的。我的要求是我有多个应用程序的命名空间部分(比如说,在一个单一的代码库中有一些分离的应用程序或接口)。例如Admin,然后是多个API接口。每个接口都有自己的数据结构等,所以当出现问题时,在CMS名称空间中我会显示自定义HTML页面。当是API V1时,我在定义的模式中显示json或xml,当是API V2时,我显示另一个json模式。正如Simple Lime所写的,也许是从我的方式中解救出来的。我使用了带有case语句的
exceptions\u app