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

尝试做一个简单的user.destroyuser.destroy以下错误:

错误:表“user”上的更新或删除违反了表“identities”上的外键约束“fk_rails_5373344100”DETAIL:Key(id)=(2)仍然从表“identity”中引用。

这是我对身份的迁移

 class CreateIdentities < ActiveRecord::Migration def change create_table :identities do |t| t.references :user, index: true, foreign_key: true t.string :provider t.string :uid t.timestamps null: false end end end 

这是我的用户和身份模型:

 class Identity  :provider def self.find_for_oauth(auth) find_or_create_by(uid: auth.uid, provider: auth.provider) end end 

和用户:

 class User  TEMP_EMAIL_REGEX, on: :update ... end 

我是外键和引用的新手,所以我不确定如何解决这个问题。 任何帮助将不胜感激。

谢谢

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

如果您想使用Rails处理破坏您可以做的身份

 class User < ActiveRecord::Base has_many :identities, dependent: :destroy ...... end 

这会导致Rails破坏所有依赖记录。

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

  add_foreign_key :identities, :users, on_delete: :cascade 

假设rails 4.2具有原生支持

一个简单的解决方案是简单地级联删除关联表中的记录,这可以通过活动记录来完成,如下所示:

user.rb

 class User < ActiveRecord::Base has_many :identities, dependent: :destroy # rest of user class end 

查看有关has_many的文档以获取更多信息。