2011-06-11 43 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