seedにデータを入れようとしたらTypeMismatchと言うエラーが出た時の解決
プログラミングを本格的にスタートして5ヶ月目に入りましたさかもとです。
今回はseeds.rbにデータを用意しようとしたらエラーにハマった時の解決の流れをアウトプットしようと思います。
状況
PFでクイズアプリを作成していました。
テーブルは下記の状態です。
scoreテーブル
contentカラム•••問題文を格納
score_answerテーブル
contentカラム•••解答が格納
scoreカラム•••点数が格納
この2つのテーブルは1対多の関係です。
seeds.rbに記述したデータ
今回のエラー
ActiveRecord::AssociationTypeMismatch: Score(#70277478931200) expected, got 0 which is an instance of Integer(#70277413551180)
思考手順
①AssociationTypeMismatchと出ていたので関連づけがうまくいってないと言う点にあ
たりをつける
②とりあえずエラー文をぐぐります。
すると「渡ってきた外部キーが違うよ」と言うような記述を発見。あたりは外してな
かったのでこのまま進みます。
③エラー文を見直すと、Score(#70277478931200) expected, got 0 which is an
instance of Integerと書いてあり予期していた値と違うものがきたと読み取りました。
④そもそも私はscore_idにid=1を入れたいのに0がきてるよと言われています。
そこで気づきました。アソシエーションのscoreとカラムのscoreがコンフリクト?し
ているのではと。
解決
まずscoreカラムをrescoreカラムに修正します。
その後、seeds.rbのscoreもrescoreに変更します。
ここまできたら最後にsaveしてrails db:seedでデータを作成します。
うまくいきました。
最後に
今回私の確認が甘くカラムとモデルの名前を同じものにしてしまいました。
通常は問題ないのかもしれませんがリレーションをいれると値がかぶってしまっていたようです。
でもそのおかげで初めて会うエラーを知り、記事も少なかったので残しました。
今後も都度残していければと思います。