[ Rails ] rails db:seedに成功しているのにDBにレコードが保存されてない時に確認すべきこと

rails-logo

 

こんにちは。たなかです。

Rails案件に入ってから、seedファイルを作成する機会がありました。

モック用のダミーデータをゴリゴリ作成していっていたところ、以下の症状にハマったのでシェアしておきます。

症状

rails db:seedを実行し、エラーなく成功するものの、
DBにレコードが保存されていない!

ターミナルからseedコマンドを実行し、成功しているようですが、sequel ProでDBを確認しても該当のデータが入っていないという状況。

null許可とか、バリデーションで失敗しているならエラーなんかが表示されるはず……。

解決方法

Modelのbelongs_toに 『optional: true』をつける!

Rails5からの仕様で、belongs_to関連はデフォルトで『required:true』になるため、required: falseにしたい時はoptional: trueを追記してやる必要があるとのこと。

nilがOKのケースの方が珍しいってことでデフォルトでnil不可になりました。

「nil許可したければ明示的にmodelに記載してねー」ってスタイルに変更されたみたいっすね。

そんな具合で使ってるモデルにoptional: trueを追記してやりました。

belongs_to :user,     optional: true
belongs_to :service,  optional: true

まとめ

 

ということで、Railsのお約束に則っていないことが原因だったみたいです。

それにしても何も言ってくれないのは不親切っすよね。無視はよくないよ無視は。

短いですが、今回はここまで。お疲れ様でした。

参考サイト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です