由于外键约束,无法删除对象
尝试做一个简单的user.destroy
但user.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
的文档以获取更多信息。
- 模型属性不会更新,在不更新的单独属性上调用validation错误?
- Rails + Postgres fe_sendauth:没有提供密码
- Rails:在同一个应用程序中同时使用mysql和postgres?
- ProtocolViolation:ERROR:绑定消息提供0个参数,但是准备好的语句“”需要1
- PostgreSQL模式的Rails迁移
- gem install pg error:无法理解Yosemite w / Ruby 2.1.5上的kern.osversion`14.0.0′
- Gem :: LoadError:为数据库适配器指定’postgresql’,但未加载gem
- Ruby on Rails + PostgreSQL:自定义序列的使用
- 准备好的陈述已经存在