ne pouvez pas supprimer l'objet en raison de la contrainte de clé étrangère
Essayer de faire une simple user.destroy
mais en cours d'exécution dans le message d'erreur suivant:
ERREUR: update ou delete sur la table "utilisateurs" viole la contrainte de clé étrangère "fk_rails_5373344100" sur la table "identités"
DÉTAIL: Key (id)=(2) est toujours référencé à partir de la table des "identités".
Voici ma migration des Identités
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
Voici mon utilisateur et de l'identité modèle:
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
et utilisateur:
class User < ActiveRecord::Base
TEMP_EMAIL_PREFIX = '[email protected]'
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
Im nouvelle pour les clés étrangères et les références, donc je ne sais pas du tout comment résoudre ce problème. Toute aide serait grandement appréciée.
Grâce
Vous devez vous connecter pour publier un commentaire.
Vous devez supprimer l'Identité qui fait référence à l'utilisateur en premier. Ensuite, vous pouvez supprimer l'utilisateur.. Par défaut de la clé étrangère est en train de faire un
restrict
si vous ne pouvez pas supprimer l'utilisateur si rien références.si vous souhaitez utiliser les Rails de la poignée de détruire l'identité que vous pouvez faire
Qui pourrait causer des Rails de détruire tous les dépendants des dossiers.
Mais comme vous êtes à l'aide de clés Étrangères, vous pouvez ajuster votre migration à l'ensemble des suppressions en cascade
En supposant rails 4.2, qui a un support natif
Une solution facile est de simplement cascade-supprimer les enregistrements dans la table associée, ce qui peut être fait par l'enregistrement actif, comme suit:
de l'utilisateur.rb
Découvrez la de la documentation concernant
has_many
pour plus d'info.