【回答】saveとsave!の違いについて
問題:
saveとsave!の違いについて教えて下さい。
回答:
saveメソッドは、保存に成功したらtrueを、保存に失敗(バリデーションに失敗)したらfalseを返します。
save!メソッドは、保存に成功したらtrueを返しますが、保存に失敗(バリデーションに失敗)したら例外が発生します。
save!メソッドの活用方法
saveに失敗した原因がわからない場合、binding.pry後、save!を活用することで保存できなかった原因がわかる。
save!で保存できない原因がわかった例
[6] pry(#<ProductsController>)> [7] pry(#<ProductsController>)> @product.save! (1.6ms) BEGIN ↳ (pry):23 (0.6ms) ROLLBACK ↳ (pry):23 ActiveRecord::RecordInvalid: バリデーションに失敗しました: 価格は300以上の値にしてください from /Users/username/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.2.3/lib/active_record/validations.rb:80:in `raise_validation_error' [8] pry(#<ProductsController>)>
この例は商品登録ページで価格を投入した時にバリデーションで300円以上にしないと登録できない設定しているにも関わらず、300未満を設定していたため、saveできなかった(保存できなかった)