2011-06-11 46 views
31

所以我知道爆(感叹号)和非爆炸方法之间的区别通常是方法将修改对象本身还是返回一个单独的修改对象,保持原始不变。Rails - 创建和创建!方法,RoR 3教程

然后,在本书的第6章中构建User模型时,我遇到了User.create方法,该方法创建一个新模型并将其单步保存到数据库中。在Michael Hartl的Ruby on Rails 3教程中,他写道User.create!方法“的工作原理与create方法一样...除了如果创建失败,它将引发ActiveRecord :: Record-Invalid异常。

我很困惑。 User.create!方法不遵循Ruby“bang-convention”还是我完全错过了某些东西?如果他遵循惯例,如果它是一个类方法,User.create!如何修改自己?

回答

60

虽然很多类治疗砰方法为“可修改对象代替方法”,我喜欢的爆炸方法的描述从Eloquent Ruby book更好:

在实践中,Ruby程序员保留 !用来装饰的方法是做 意想不到的事情,或者也许有点 危险

因此,在这种情况下,名称时,“意外”的结果是一个例外改为引发的只是失败,返回false