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

Ruby on rails 我什么时候/为什么要在方法上引发异常?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我注意到rails中的一些方法使用了运算符在无效时引发异常。例如,User.create 为什么和什么时候我会想用这样的东西 谢谢。 因此,抛出异常的方法很好地确保数据库在异常情况发生时不会提交事务。当您可以自己“处理”这个问题时——或者,如果它实际上不是问题——那么您就可以在不使用的情况下使用这个变量,检查返回值中的错误条件,并自行处理 对于特定的内容,如User.create: 您可以使用User.create方法来确定是否尚未选取用户提供的用户名,如果用户名已在使用中,则提示用户选择其他

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

为什么和什么时候我会想用这样的东西

谢谢。

因此,抛出异常的方法很好地确保数据库在异常情况发生时不会提交事务。当您可以自己“处理”这个问题时——或者,如果它实际上不是问题——那么您就可以在不使用
的情况下使用这个变量,检查返回值中的错误条件,并自行处理

对于特定的内容,如
User.create

  • 您可以使用
    User.create
    方法来确定是否尚未选取用户提供的用户名,如果用户名已在使用中,则提示用户选择其他名称
  • 您可以使用
    User.createmethod,这样您的完整性检查可能会导致创建和回滚事务失败,以防用户试图绕过友好名称检查

    • 出于各种原因,我可能需要例外

      • 我可能想确保该方法成功,但我不想在这里做任何实际的错误处理。但是,如果某个请求失败,我可能会很好地处理该请求(例如生成HTTP 500)
      • 我可能希望在其他地方进行一些错误处理,例如在呼叫链的某个位置。一般来说,将错误状态拖到错误处理的很长一段时间会更加冗长和令人讨厌。结构化错误处理,即,
        begin。。。拯救。。。结束
        更清楚地说明这一点
      • 异常可以附加其他数据(例如错误消息)
      • 如果您有不同的错误类型,那么用不同的异常类来表示这些错误通常会更加清晰,而不是使用一些神奇的id值(这在C中很常见)
      当错误状态数量很少且在调用后直接完全处理时,有充分的理由不使用异常而使用状态标志。但是每一种技术都有它的位置和时间


      顺便说一句,
      save
      方法在内部调用
      save,处理潜在异常,如果存在,则返回false。有关实现,请参阅。

      学究式的nit:that
      不是运算符,它是方法名称的一部分。有时,这意味着要就地操作数据——这取决于所讨论的API;而
      是一个操作符,当它是方法名称的一部分时,它不是操作符,比如
      create。顺便说一句:作者称这个符号为
      作为操作员。这不适合这种情况:这个符号只是方法名称的一部分,所以有两种不同的方法,比如,
      create
      创建
      。这是Ruby特性——许多其他语言不允许使用这种符号,因此很容易将它们与运算符混淆。