2009-07-16 7 views
1

J'ai un modèle utilisateur sur lequel je vérifie pour vous assurer que l'adresse e-mail fournie est unique:ActiveRecord save (false) valider encore le modèle

validates_uniqueness_of :email 

Ce modèle agit comme paranoïaque. Sur détruire, j'ai besoin de supprimer l'adresse e-mail de sorte que si l'utilisateur veut se réinscrire, ils peuvent. Pour cela, je donne les résultats suivants:

before_destroy :remove_email 

def remove_email 
    self.email = "[deleted]" 
    save(false) 
end 

La méthode est appelée au moment opportun, mais la méthode d'enregistrement jette l'erreur suivante:

ActiveRecord::StatementInvalid: Mysql::Error: Duplicate entry '[deleted]' for key 2: UPDATE `users` SET `email` = '[deleted]', `updated_at` = '2009-07-16 12:29:05' WHERE `id` = 53 

Il semble donc que la validation est toujours en cours d'exécution à un certain niveau. Y a-t-il un moyen de contourner cela?

Répondre

2

J'ai trouvé le problème: j'avais un index unique sur le courrier électronique. Si vous obtenez cette erreur, vérifiez votre schéma pour les index uniques. L'indice est que Mysql lance l'exception, pas les rails.

Comme dit le proverbe: "SELECT n'est pas cassé".

Questions connexes