由于外键约束,无法删除对象

我正在尝试执行一个简单的user.destroy,但遇到以下错误:

错误:表“用户”上的更新或删除违反了表“标识”上的外键约束“fk_rails_5373344100”
详细信息:键(id)=(2)仍从表“标识”中引用

这是我的身份迁移

类createIdentity<ActiveRecord::迁移
def更换
创建|u表:标识不可用|
t、 参考:用户,索引:true,外键:true
t、 字符串:提供程序
t、 字符串:uid
t、 时间戳null:false
终止
终止
终止

以下是我的用户和身份模型:

类标识<ActiveRecord::Base
属于:用户
验证是否存在:uid,:provider
验证:uid,:scope=>的唯一性:供应商
定义self.find_for_oauth(auth)
查找或创建用户(uid:auth.uid,提供程序:auth.provider)
终止
终止

和用户:

类用户<ActiveRecord::Base
临时电子邮件[email protected]'
临时电子邮件注册表=/\[email protected]/
#包括默认设计模块。其他可供选择的项目包括:
#:可锁定,:可超时
设计:数据库可验证,:可注册,:可确认,
:可恢复,:可记忆,:可跟踪,:可验证,:全授权
验证以下内容的格式:电子邮件,:不带=>临时电子邮件注册表,on::更新
...
终止

我不熟悉外键和引用,所以我根本不知道如何修复它

您需要先删除引用用户的标识。然后您可以删除该用户。。默认情况下,外键执行限制,因此,如果有任何内容引用该用户,则无法删除该用户

如果您想使用Rails来处理身份销毁,您可以这样做

类用户<ActiveRecord::Base
有很多:身份,依赖::销毁
......
终止

这将导致Rails销毁所有相关记录

但在使用外键时,可以调整迁移以设置级联删除

在删除::级联上添加外键:标识,:用户

假设rails 4.2具有本机支持

发表评论