1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Railsでのマイグレーションエラーを解決した1つの事例

Posted at

今回はマイグレーションで失敗し、メンターに相談して、解決までのメモ書きです。
オンラインスクールの教材で、いいねをカウントするアプリのようなものを作っていました。
いいねをカウントするコードを入れてマイグレーションを実行したけれど、どうやらそこが上手くいってなかったようです。

マイグレーションエラー発生

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を行う

問題となるファイル、

20201222001044_add_likes_count_to_posts.rb
class AddLikesCountToPosts < ActiveRecord::Migration[6.1]
  def change
    add_column :posts, :likes_count, :integer, default: 0
  end
end

こちらを一旦コメントアウトし、rails db:rollbackコマンドを使いロールバック。
そして、コメントアウトを戻して再度、rails db:migrateを実行。
無事に正しくマイグレーションが行われ、きちんと動作確認を取ることができました!!:clap::clap:

まとめ

今回の失敗はおそらく、likes_countを入れる前にマイグレーションを行ってしまった事だったのだと思います。
マイグレーションを行う際はきちんとファイルの確認を行ってから、実行したいと思います。
それにしても、メンターの方の素早いレスと対応ですぐに解決することができました。
ありがたや、ありがたや!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?