Rails 5控制器中捕获:abort信号的最佳方法

11
在Rails 5中,当回调需要取消后续回调时,建议的过程已记录在案,“您应该明确地throw:abort。”
我的问题是:推荐如何捕获此异常?
我的当前解决方案是在我的ApplicationController中捕获UncaughtThrowError - 鉴于它的文档方式,我认为此功能会触发Rails或Rack中间件中的某些魔法,立即转移到渲染(ActionView)阶段。

1
我遇到了同样的问题 - 不确定什么是“推荐”的方法... - Vijay Raghavan Aravamudhan
同样的问题,无论是 rescue SystemExit、Interrupt、StandardException 还是 Exception,似乎都无法捕获 throw(:abort)。有什么想法吗? - tommyalvarez
1
我也期望Rails能以不同的方式处理这个问题。有人找到了推荐的解决方案吗? - DannyB
是的,确实很奇怪,没有明确的错误可以捕获中止。在我的 Rspec 测试中,我不得不使用 raise_error( UncaughtThrowError ) 才能让它正常工作。 - Joshua Pinter
2个回答

1
您可能需要编写一个方法,覆盖处理回调的基础方法,以具有处理catch :abort {}的功能,但这感觉太过神秘。
我认为在您抛出异常的控制器中使用rescue_from UncaughtThrowError比在ApplicationController中使用更好,除非这是真正常见的回调,否则您可能需要一个Concern?
我曾经尝试了一整天,然后决定不使用我想要做的回调,从而消除了对回调、抛出、救援和捕获的整个需求。
尽管如此,我相信这种方法有很好的用例,但它的文档不够充分。

1

1
我不知道是谁给了你点赞,但我严重怀疑这种方法会因为各种原因而失败。你有测试过吗? - Joshua Pinter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接