1

Rails を使用して、ユーザー テーブル、グループ テーブル、結合用の groups_users を含む HATBM モデルをセットアップしました (すべて scaffold コマンドを使用)。group_id/user_id の組み合わせを一意に制限するために、テーブル groups_users の group_id 列と user_id 列の両方に一意のインデックスを追加する移行を追加したいと考えています。個々の列 group_id および user_id は null ではなく、既にインデックスが作成されています。

移行で実行したい行は次のとおりです。

add_index :groups_users, [:user_id, :group_id], :unique => true

次のエラーが表示されます。

-- add_index(:groups_users, [:user_id, :group_id], {:unique=>true})
rake aborted!
An error has occurred, this and all later migrations canceled:

SQLite3::ConstraintException: constraint failed: CREATE UNIQUE INDEX "index_groups_users_on_user_id_and_group_id" ON "groups_users" ("user_id", "group_id")

Mac OSでRails 3.2.11を使用し、dbとしてsqlite3を使用しています。

ネット上でそのエラーのレポートを見なかったので、明らかな説明があるに違いないと確信していますが、私はひどく立ち往生しています...ここで満たされていない制約は何ですか? group_id と user_id のインデックスを削除しようとしましたが、何も変わりません。一意性のない 2 列インデックスを作成すると、機能します (ただし、役に立ちません...)。

誰かの助けが大歓迎です...

4

2 に答える 2

4

UNIQUEテーブル内の現在のデータで制約を満たすことができなかったかのようです。と で確認しGROUP BYてくださいCOUNT

于 2013-02-07T13:35:07.910 に答える
1

「groups_users」テーブルには重複データが含まれているため、重複を手動で消去するか、rake db:reset.

データベースからすべてのデータを削除するか、重複を見つけて、重複をクリアしたら、rake db:migrateエラーなしで実行できるはずです。

PS、破壊的であるため、上記のコマンドを実行する前に、データベースのバックアップがあることを確認してください。

于 2013-02-07T14:50:07.243 に答える