2011-03-11 49 views
4

有時我看到了!保存後,和其他一些有效的記錄方法...有什麼區別?rails 3 - widget.save和widget.save的區別!

+0

可能的重複[保存/保存的內容!做什麼?](http://stackoverflow.com/questions/1997201/what-exactly-does-save-save-do) – 2011-03-11 09:07:59

回答

3

使用的一般模式或約定!在rails中的方法的末尾指示該函數可能會引發異常,而non-bang方法僅返回一個值。

不拋出異常的後果允許您使用返回值作爲正常處理的一部分。

 
if obj.save 
    # yay, it worked! 
else 
    # boo 
end 

注意這不是Ruby強制執行的規則,只是一個約定。其他庫(如String的標準庫)具有返回操作結果與修改對象值的方法。

 
    String s="Hello, world" 
    s.gsub("world", "Joe") # returns a new string object, leaving s alone 
    s.gsub!("world", "Joe") # modifies the value of s 
+0

非常有幫助謝謝! – jpwynn 2011-03-11 17:41:18

+0

按照慣例,方法名稱中唯一的'!'意味着它是一個潛在的危險操作。 「危險」的常見情況是會引發異常,或者會自行修改結果。但也有許多其他不太常見的情況。 – 2011-03-11 17:45:32

13

save如果記錄無法保存(例如驗證錯誤)將返回false。

save!如果記錄無法保存,將引發異常。使用save!當你很確定它應該保存沒有問題,如果它不,那麼它是一個非常大的錯誤和一個例外是適當的。

+0

謝謝你這個......也給了它一個投票。 – jpwynn 2011-03-11 17:42:27