今回はマイグレーションで失敗し、メンターに相談して、解決までのメモ書きです。
オンラインスクールの教材で、いいねをカウントするアプリのようなものを作っていました。
いいねをカウントするコードを入れてマイグレーションを実行したけれど、どうやらそこが上手くいってなかったようです。
マイグレーションエラー発生
rails db:migrate
を実行すると、
An error has occurred, this and all later migrations canceled:PG::UndefinedColumn: ERROR: column "likes_count" of relation "posts" does not existLINE 1: UPDATE "posts" SET "likes_count" = $1 WHERE "posts"."id" = $...
というエラーが出ました。
Google翻訳ですが、「post列にlikes_countが存在してませんよ!」と怒られているようでした。
rails db:migrate:statusを確認
メンターの方より、「rails db:migrate:status
を確認してみてくれ」という指示を受けました。確認してみると、
database: like_app_development
Status Migration ID Migration Name
--------------------------------------------------
up 20201221071016 Devise create users
up 20201221072319 Create posts
up 20201221223916 Create likes
up 20201222001044 Add likes count to posts
down 20201222001313 Reset all post cache counters
どうやら、20201222001044の部分でlikes countが上手く追加できていなかったよう。
rails db:rollbackを行う
問題となるファイル、
class AddLikesCountToPosts < ActiveRecord::Migration[6.1]
def change
add_column :posts, :likes_count, :integer, default: 0
end
end
こちらを一旦コメントアウトし、rails db:rollback
コマンドを使いロールバック。
そして、コメントアウトを戻して再度、rails db:migrate
を実行。
無事に正しくマイグレーションが行われ、きちんと動作確認を取ることができました!!
まとめ
今回の失敗はおそらく、likes_countを入れる前にマイグレーションを行ってしまった事だったのだと思います。
マイグレーションを行う際はきちんとファイルの確認を行ってから、実行したいと思います。
それにしても、メンターの方の素早いレスと対応ですぐに解決することができました。
ありがたや、ありがたや!