save 可以接收一個參數 :perform_validation => true/false,預設為 true。
當 perform_validation 被設為 false 時不會過 validation.

save! 沒有任何額外參數,一定會過 validation.

在執行 save 時,如果有任一個 before_* validation 失敗,整個 save 會回傳 false。

而在執行 save! 時,before_* validation 失敗則是會丟一個例外 ActiveRecord::RecordNotSaved 回來。

所以在應用上:

  • 在 controller 裡一般使用 save,免得每一個 save 失敗都要做 rescue,因為使用者的輸入錯誤是很自然會發生的;
  • 而在像是 rake 或 test 中,就應該使用 save!,方便 debug.

 

參考:Rails API - Class:ActiveRecord::Base#save

創作者介紹
創作者 沒力小僧 的頭像
沒力小僧

Manic's Talk

沒力小僧 發表在 痞客邦 留言(0) 人氣()