微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 由于外键约束,无法删除对象

尝试做一个简单的user.destroy但运行到以下错误

错误:表“用户”上的更新或删除违反表“身份”上的外键约束“fk_rails_5373344100”
详细信息: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 < ActiveRecord::Base
  belongs_to :user

  validates_presence_of :uid,:provider
  validates_uniqueness_of :uid,:scope => :provider

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

用户

class User < ActiveRecord::Base
  TEMP_EMAIL_PREFIX = 'ricky@writeit.com'
  TEMP_EMAIL_REGEX = /\ricky@writeit.com/

  # Include default devise modules. Others available are:
  # :lockable,:timeoutable
  devise :database_authenticatable,:registerable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:omniauthable

  validates_format_of :email,:without => TEMP_EMAIL_REGEX,on: :update
...

end

我新的外键和引用,所以我不知道如何解决这个问题.任何帮助将不胜感激.

谢谢

解决方法

您需要先删除引用用户的身份.然后你可以删除用户..认情况下,外键正在执行限制,所以如果有任何引用,则不能删除用户.

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

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

  ......

 end

这将导致Rails销毁所有依赖记录.

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

add_foreign_key :identities,:users,on_delete: :cascade

假设rails 4.2具有本地支持

原文地址:https://www.jb51.cc/ruby/271979.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐