我正在阅读一篇文章,其中说所有异常都会导致Ruby崩溃。 http://blog.honeybadger.io/a-beginner-s-guide-to-exceptions-in-ruby/
我有一些数据库架构限制:
create_table :options_sets do |t|
t.boolean :shared, :null => false
end
因此,当我创建一个违反约束的新options_set导致异常时,我不知道如何检查服务器是否已重新启动,但它看起来不像我。
OptionsSet.create()
错误消息:
ActiveRecord::StatementInvalid (PG::NotNullViolation: ERROR: null value in column "shared" violates not-null constraint
我也多次读过"不应该预期例外"而且你不应该出于各种原因(比如竞争条件)完全依赖模型验证。所以在我看来,这是一个必须有时期望的例外。
那么,我应该拯救这个例外,还是应该以另一种方式处理?
答案 0 :(得分:1)
Rails处理所有其他未处理的异常并将其转换为HTML错误页面。 Ruby不会因为你在Rails应用程序中挽救异常而“崩溃”或重新启动。
那么,我应该拯救这个例外,还是应该以另一种方式处理?
您应该在模型中使用验证,以防止您达到数据库级异常。
答案 1 :(得分:0)
您在此处看到的异常是由错误的编程语句引起的异常。如果你有一个
OptionsSet.create()
在您的代码中,此语句 错误,应该修复。无需救援/处理任何事情。 但是,如果此异常可能是由用户输入或其他程序状态引起的,例如
OptionsSet.create(shared: some_expression_which_may_evaluate_to_nil)
然后你应该处理异常,以允许你的应用程序向用户返回有意义的错误消息,允许他/她更正输入。