我注意到 Rails 中的某些方法使用!
运算符在无效时引发异常。例如,User.create!
为什么以及何时要使用这样的东西?
谢谢。
我可能出于各种原因想要例外
begin ... rescue ... end
使其更清晰。当错误状态数量很少并且在调用后直接完全处理时,有充分的理由不使用异常而是状态标志。但每一种技术都有它的位置和时间。
顺便说一句,该save
方法在内部调用save!
,处理潜在的异常并返回 false(如果有)。请参阅实现代码。
如果在事务处于活动状态时抛出异常,ActiveRecord 将回滚事务。
因此,抛出异常的方法可以很好地确保数据库在发生异常情况时不会提交事务。当您可以自己“处理”问题时——或者,如果它实际上不是问题——那么您可以使用不带 的变体!
,检查返回值是否存在错误条件,然后自己处理它们。
对于特定的东西,例如User.create
:
User.create
方法来确定是否尚未选择用户提供的用户名,并提示用户选择另一个名称(如果已在使用中)。User.create!
在最终提交请求时使用该方法,以便您的完整性检查可以使创建和回滚事务失败,以防用户试图绕过您的友好名称检查。