【結論】
・railsのsaveメソッドは
保存が正常に終了しなかった場合
「false」を返すだけで
エラーログは表示されない
・エラー内容を把握したい場合は
「save!」を利用する
・「save!」はエラーになった場合
例外を返すので、エラー内容が把握できる
【目次】
【本題】
saveメソッドの利用シーン
saveは、生成したモデルオブジェクトを
データベースに保存するメソッドです。
更に、保存が正常に完了すれば「true」
エラーになれば、「false」を返します。
なので、下記の様にcreateアクションで
IF文の条件式として利用されるケースが多いです。
def create @list = List.new(list_params) if @list.save redirect_to list_index_path, notice: 'リストを作成しました' else render :new end end
saveメソッドでエラーが発生した場合
エラーが発生した場合、
saveメソッドは「false」しか値を返さないので、
処理結果を見ても、
↳ app/controllers/application_controller.rb:24 (0.2ms) BEGIN ↳ app/controllers/list_controller.rb:12 (0.3ms) ROLLBACK ↳ app/controllers/list_controller.rb:12
詳しい原因の調査ができません。
そうした場合、「save!」を利用します。
「save!」は例外を発生させるので、エラーが発生した場合、
その内容に応じたエラー文を表示させてくれます
下記がエラーの一例です。
ActiveRecord::RecordInvalid: バリデーションに失敗しました: Userを入力してください
文字通り、バリデーションに失敗した事を表します。
これは、外部キーに設定した所属先のテーブルに
データが無かった外部キー制約のバリデーションに
引っ掛かってしまった時に発生したエラーです。
この様に、「save!」を用いれば、
そこからエラー原因の調査が可能になります。
《今日の学習進捗(3年以内に10000時間に向けて)》
インターン初日 環境構築で半日以上潰れてしまう・・・
最近、ERD(データモデリング)とか基本情報とか 座学メインで勉強していた為、久しぶりにコードを触ると、 かなりもたついた・・・
定期的に書く習慣を身につける必要があると感じた
学習開始からの期間 :107日
今日までの合計時間:994h
一日あたりの平均学習時間:9.3h
今日までに到達すべき目標時間:977h
目標との解離:17h
「10,000時間」まで、
残り・・・「9006時間!」