迷い人

日々勉強。勉強の先に何か見つかるといいなぁ

【回答】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できなかった(保存できなかった)