Ruby on rails 在这种情况下,如何避免双重渲染?

Ruby on rails 在这种情况下,如何避免双重渲染?,ruby-on-rails,api,controller,pundit,rescue,Ruby On Rails,Api,Controller,Pundit,Rescue,我的控制器中的代码有问题: class Api::V1::BaseController

我的控制器中的代码有问题:

class Api::V1::BaseController
问题 从标准错误中解救出来是我所有麻烦的根源。这个控制器工作得很好,当权威错误是唯一发生的错误时,它可以从权威白名单检查中解救出来

但一旦pundit旁边发生任何其他错误,我就会得到一个
DoubleRenderError
,因为两次救援都会被触发。我正在寻找一个快速的调整,以避免博彩触发时,另一个错误已经发生,或为这个问题的替代解决方案

有没有其他错误类可以用来避免严重依赖
StandardError

我试过的东西
  • 在渲染后添加返回 它不起作用。我假设救援链干扰了正常的
    render:x和return
    行为

多谢各位

您实际上不需要使用
rescue\u from StandardError
,因为这是Rails的默认行为。Rails有一个称为
PublicExceptions
的中间件,它(主要)做您想要做的事情,因此您可以让StandardError传播

而不是
{error:“内部服务器错误”}
它将呈现此

{
状态:状态,
错误:Rack::Utils::HTTP\u STATUS\u code.fetch(状态,Rack::Utils::HTTP\u STATUS\u code[500])
}
如果出现异常,将呈现
{status:500,error:“Internal Server error”}
。这应该是一个合理的妥协

对于开发,您可以考虑采用这个中间件。您可以使用
config.exceptions\u app
进行设置


一个简单的快速修复方法是在渲染后使用
return
。这样,下一步就不会运行。因此,在最后的所有方法中,只需使用
return

例:

def用户未经授权(例外)
呈现json:{
错误:“未经授权的#{exception.policy.class.to_.下划线.camelize}.#{exception.query}”
},状态::未经授权
返回
结束

非常感谢,伙计!还有,自从几天前我把RailsConf 2020 talk标记为“RailsConf 2020”供您观看以来,您的答案就有了。不客气!太棒了,让我知道你在Twitter@bruckmayer上的想法!我应该在问题中详细说明,因为这也是我的第一本能。这不管用。我假设救援链干扰了正常的
render:x和return
行为。