Error: Duplicate column name を解決する
rails db:migration
した時に、Error: Duplicate column name "fuga"
というエラーが出た時の解決方法。
エラーにある通り、fugaというカラムはダブってまっせ〜ということです。
まず現在のDBのバージョンを確認。
$ rails db:migrate:status database: db/development.sqlite3 Status Migration ID Migration Name -------------------------------------------------- up 20200707094922 Create books up 20200708020232 Add picture to books up 20200718144222 Devise create users drop 20200718161232 Add column to users up 20200802141002 Add omniauth columns to users up 20200802143752 Add index to users up 20200808064935 Create relationships up 20200809072542 Add not null to relationship
Add column to users
に対応するマイグレーションファイルが実行できていない。
次にdb/schema.rb
を確認。
ActiveRecord::Schema.define(version: 2020_08_09_072542) do # 省略 create_table "users", force: :cascade do |t| t.string "name" end end
既にUserのnameというカラムは作成されていることを確認できる。
つまりマイグレーションの実行結果は既にDBに反映されているため、同じマイグレーションを実行することはできないということ。
よって、マイグレーションファイルを以下のように修正し、rails db:migrate
する。
class AddColumnsToUsers < ActiveRecord::Migration[6.0] def change # 何も書かない end end
これで全てのマイグレーションを実行できた。
$ rails db:migrate:status database: db/development.sqlite3 Status Migration ID Migration Name -------------------------------------------------- up 20200707094922 Create books up 20200708020232 Add picture to books up 20200718144222 Devise create users up 20200718161232 Add column to users up 20200802141002 Add omniauth columns to users up 20200802143752 Add index to users up 20200804145226 Create active storage tablesactive storage up 20200808064935 Create relationships up 20200809072542 Add not null to relationship
修正したマイグレーションファイルは、元の状態に戻しておく。