如何在模型中拯救异常?

phu*_*art 4 ruby-on-rails

在Rails中.

异常可以在控制器类中进行抢救,但在模型类中则不能.

如何在模型中拯救异常?

Mik*_*cic 12

你可以在rails应用程序的任何地方进行异常处理,因为它是Ruby的一部分,而不是Rails的一部分.无论您想要捕获哪些错误,只需将其包装为:

begin
  SomethingElse.doSomething(x, y)
rescue Exception
  ErrorLogger.log(Time.now, "Something went wrong!")
end
Run Code Online (Sandbox Code Playgroud)

请注意,您应始终"拯救异常"而不是"救援".只使用"rescue"只会捕获StandardError,它是Exception的子类(意味着可能会通过您不希望通过的内容).

与往常一样,您可以通过执行以下操作来引发异常:

raise ArgumentError, "Illegal arguments!"
Run Code Online (Sandbox Code Playgroud)

代码中的任何位置,无论是模型还是控制器.

  • 一般我同意,但我不同意你的第一个代码块.你不应该直接使用"救援异常",因为它甚至会拯救试图杀死进程的信号.除非你真的想确保你想让这部分代码免于被彻底杀死,否则坚持使用Ruby的默认行为是有充分理由的.因此,通常更好的做法是使用vanilla"rescue"并让您的自定义错误类派生自StandardError. (3认同)
  • 小修正:你的第二个代码片段中有一个双重"加注".但是答案很好. (2认同)