saveメソッドでエラーが発生した時のデバック方法

f:id:ryoutaku_jo:20190325211440p:plain

【結論】

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時間!」