使用rails,我设置了一个HATBM模型,其中包含用户表,一个组表和一个用于连接的groups_users(全部使用scaffold命令)。 现在,我想添加一个迁移,为表groups_users的group_id和user_id列添加唯一索引,以限制group_id / user_id couple是唯一的。 各个列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,sqlite3作为db。
我确信必须有一些明显的解释,因为我没有在网上看到任何关于该错误的报告,但我非常困难......这里不满足什么约束?我试图删除group_id和user_id上的索引,但它不会改变任何东西。如果我创建没有唯一性的双列索引,那么它可以工作(但是没有帮助......)
有人的帮助非常感谢...
答案 0 :(得分:4)
似乎表格中的当前数据无法满足UNIQUE
约束。查看GROUP BY
和COUNT
。
答案 1 :(得分:1)
您的“groups_users”表中包含重复数据,因此您必须手动清除欺骗行为或仅使用rake db:reset
重置数据库。
一旦清除了重复项,通过从数据库中删除所有数据或找到欺骗,您应该能够无错误地运行rake db:migrate
。
PS,确保在运行上述命令之前备份了db,因为它具有破坏性。