seedにデータを入れようとしたらTypeMismatchと言うエラーが出た時の解決

 

プログラミングを本格的にスタートして5ヶ月目に入りましたさかもとです。

今回はseeds.rbにデータを用意しようとしたらエラーにハマった時の解決の流れをアウトプットしようと思います。

 

状況

 

PFでクイズアプリを作成していました。

テーブルは下記の状態です。

https://i.gyazo.com/d816c058434721b0a47424f06cf4f990.p

scoreテーブル

contentカラム•••問題文を格納

score_answerテーブル

contentカラム•••解答が格納

scoreカラム•••点数が格納

 

この2つのテーブルは1対多の関係です。

 

seeds.rbに記述したデータ

 

https://i.gyazo.com/afe54c84ab6663e6c5b17cf3a05b2e02.png

 

今回のエラー

 

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がコンフリクト?し

 ているのではと。

 

解決

 

https://i.gyazo.com/aaf3501fc9844001ad897232b78c3d65.png

まずscoreカラムをrescoreカラムに修正します。

https://i.gyazo.com/a3eea86849de5ab5d0dd050202e4e378.png

その後、seeds.rbのscoreもrescoreに変更します。

ここまできたら最後にsaveしてrails db:seedでデータを作成します。

うまくいきました。

 

最後に

 

今回私の確認が甘くカラムとモデルの名前を同じものにしてしまいました。

通常は問題ないのかもしれませんがリレーションをいれると値がかぶってしまっていたようです。

でもそのおかげで初めて会うエラーを知り、記事も少なかったので残しました。

今後も都度残していければと思います。