Railsでテーブルのデータに対して一意性制約を付与するマイグレーションファイルを実行しようとした際に上記エラーが発生
class AddIndexToUserBooks < ActiveRecord::Migration[6.0]
def change
add_index :user_books, [:user_id, :book_id], unique: true
end
end
マイグレーションの内容としては中間テーブルのデータの組み合わせに対して一意性制約を設けるもの。
原因と解決策
すでにテーブルに存在しているデータが一意性制約に反していた。
上記例でいれば、同じuserとbookの組み合わせがすでにテーブルに挿入されていることが原因で一意性制約を付与できない状態だった。
これをテーブルから直接削除して解決
所感
Duplicate entryはマイグレーション実行時には発生しないと思っていたので一瞬焦りました。
マイグレーションが実行される場合はすでにテーブルに存在しているデータとの整合性も判定されているということですね。