#結論
どちらのメソッドもデータベースに更新する直前にvalidationを実行する。
validationに妥当性がなかった場合に
・update_attributes falseを返す
・update_attributes! 例外処理を返す
という違いがある。
#例
入力必須であるnameカラムを持つUserモデルを例にすると
###update_attributes
user.update_attributes(name: nil)
=> false
###update_attributes!
user.update_attributes!(name: nil)
ActiveRecord::RecordInvalid: Validation failed: Name can't be blank
それぞれ上記の処理をする。