こんにちは。たなかです。
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のお約束に則っていないことが原因だったみたいです。
それにしても何も言ってくれないのは不親切っすよね。無視はよくないよ無視は。
短いですが、今回はここまで。お疲れ様でした。