ruby-on-rails - 我什么时候/为什么要在方法上引发异常?

标签 ruby-on-rails ruby

我注意到 Rails 中的某些方法使用 ! 运算符在无效时引发异常。例如,User.create!

我为什么以及什么时候想要使用这样的东西?

谢谢。

最佳答案

我可能出于各种原因想要异常(exception)

  • 我可能想确保该方法成功,但我不想在这里进行任何实际的错误处理。但如果出现问题,我可能会接受请求爆炸(例如生成 HTTP 500)
  • 我可能希望在其他地方进行一些错误处理,例如调用链中的某个方式。通常,在错误处理的很长一段路要走一些错误状态会更加冗长和讨厌。结构化错误处理,即 begin ... rescue ... end 使这一点更清楚。
  • 异常可以附加附加数据(例如错误消息)
  • 如果您有不同的错误类型,用不同的异常类来表示错误类型而不是一些神奇的 id 值(在 C 中很常见)通常会更清楚

当错误状态数量很少并且在调用后直接完全处理时,有充分的理由不使用异常而是使用状态标志。但是每一种技术都有它的位置和时间。

顺便说一句,save 方法在内部调用 save!,处理潜在的异常并在有异常时返回 false。参见 the code用于实现。

关于ruby-on-rails - 我什么时候/为什么要在方法上引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10404674/

相关文章:

javascript - 我怎样才能让 URL 中的电子邮件地址显示在我的网页上,使用 javascript 或 HTML 构建在 Ruby on Rails 上的网站?

ruby-on-rails - Wercker 测试无法打开临时文件

ruby - 如何解析 Ruby 中的时间间隔?

ruby - 当你运行 "rails server"时,你如何让 ruby​​ 版本与你看到的 "ruby -v"相匹配?

ruby-on-rails - Ruby 中的方法链是如何工作的?

mysql - 无法让这个连接在 Rails 中工作

ruby-on-rails - 在前端运行集成/验收测试。前端需要一个 API 来告诉 Rails 为每个测试设置哪个数据库状态

ruby-on-rails - 使用 cancan 让用户只管理一些模型

ruby - 如何在 GitHub 上推送 Octopress 博客的更改?

ruby - 使 ruby​​ 可用于 Debian9 镜像时出现问题