[Rails]seeds.rbを書くときはcreateではなく、create!を使ったほうがいい?

プログラミング

事の始まり

スクールの同じ班の人からseeds.rbに書き込んでも、データが反映されないという相談を受けました。その時の画像が以下になります。

みたところ、記述に間違いはありません。また、状況が再現できるか自分のアプリケーションで同じことをしてみたところ、自分の環境ではきちんとDBにデータが入ります。

なので、テーブル名やカラム名が間違えていないか確認してもらったところどうやら間違いはなさそうです。

解決方法

この時、厄介なのが、ターミナルなどに何もエラーがでていないことです。何かしらエラーがでてくれれば、対処のとりようがあるのですが、、、。もう手詰まりかと思ったところ、以下の記事を見つけました。

第9章 ユーザーの更新・表示・削除 - Railsチュートリアル
SNS開発やWebサイト制作が学べる大型チュートリアル。作りながら学ぶのが特徴で、電子書籍や解説動画、質問対応、社員研修、教材利用にも対応しています。

そうか、この時もcreateではなく、create!を使えば良いのかと。早速seeds.rbのcreateをcreate!に変えて、db:seedをしてみたところ

エラーがでました!。Tops category must exitと言っています。どうやら、Tops categoryとアソシエーションを組んでいたのに、外部キーとなるカラムが存在しなかったからエラーとなって、データが入らなかったみたいです。(アソシエーションを組んでいたなんて初耳です><)

結局、アソシエーション要らなくない?ということになり、アソシエーションを外すことで、きちんとDBにデータが入るようになりました。

まとめ

seeds.rbを用いて、データを入れるときは、createよりcreate!を使ったほうが、万が一の時、エラーが表示されるので、わかりやすい。

タイトルとURLをコピーしました