2
1

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 1 year has passed since last update.

【Ruby on rails】rails db:migrateできない時の対処法

Last updated at Posted at 2023-11-10

はじめに

プログラミングを勉強して3か月ほどです。
プログラミングスクールを卒業し、現在就職活動をしています。

今回はオリジナルアプリ作成時に発生したエラーで苦戦したので、その対処方法を共有したいと思います。

@mogya(daisuke furukawa)さんの記事を参考にさせていただきました。

今回のエラー内容

今回発生したエラーはrails db:migrateができなくなるエラーです。
rails db:migrateを実行するとターミナルに以下のエラーログが表示されました。
私が実行しようとしているテーブルは存在していると表示されています。
Image from Gyazo

また、rails db:migrate:statusを使ってマイグレーションファイルの実行状態を確認したところ、実行されていないことが示されていました。
Image from Gyazo

エラー原因(おそらく)

私はマイグレーションファイルに下記のような記述をしました。

2023xxxxxxxxx_create_notifications.rb
class CreateNotifications < ActiveRecord::Migration[7.0]
  def change
    create_table :notifications do |t|
      t.integer :visitor_id, null: false
      t.integer :visited_id, null: false
      t.references :room, null: false, foreign_key: true
      t.string :action, default: '', null: false
      t.boolean :checked, default: false, null: false

      t.timestamps
    end

    add_index :notifications, :visitor_id
    add_index :notifications, :visited_id
    add_index :notifications, :room_id
  end
end

私はadd_indexの記述を初めて見よう見まねで使ってみました。
しかし、その記述方法に間違いがあったことにより今回のエラーが発生しました。

エラー対処方法

一度マイグレーションファイルの内容をコメントアウトします。

2023xxxxxxxxx_create_notifications.rb
class CreateNotifications < ActiveRecord::Migration[7.0]
  def change
    # create_table :notifications do |t|
    #   t.integer :visitor_id, null: false
    #   t.integer :visited_id, null: false
    #   t.references :room, null: false, foreign_key: true
    #   t.string :action, default: '', null: false
    #   t.boolean :checked, default: false, null: false

    #   t.timestamps
    # end

    # add_index :notifications, :visitor_id
    # add_index :notifications, :visited_id
    # add_index :notifications, :room_id
  end
end

この状態でrails db:migrateを実行します。
すると、しっかりマイグレーションファイルが実行されています。
Image from Gyazo

ここまできたら、マイグレーションファイルの中身を正しい記述に変更します。
変更後、rails db:rollbackで戻した後、rails db:migrateを実行するとエラーが解消されます。

終わりに

今回はrails db:migrateできない時の対処法を共有させていただきました。
エラーが発生すると、作業が滞り、気持ちも落ち込みがちですが、解決した時の喜びは計り知れません。
エラーが発生した時は、先人たちの知恵や経験から学ばせてもらいましょう!
この記事が誰かの役に立てば幸いです。

最後まで読んでいただきありがとうございました!!!

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?