2010-05-19 3 views
0

je l'association suivante dans mon modèle d'utilisateur:Pourquoi obtenir une erreur d'enregistrement actif lorsque vous essayez de travailler sur des baies?

has_and_belongs_to_many :friends, :class_name => 'User', :foreign_key => 'friend_id' 

Je la contrainte d'unicité suivante dans ma table user_users:

UNIQUE KEY `no_duplicate_friends` (`user_id`,`friend_id`) 

Dans mon code, je suis en train de récupérer les amis d'un utilisateur -> amis = user.friends. friends est un tableau.

J'ai un scénario où je veux ajouter l'utilisateur avec tous ces amis au tableau d'amis. Ex:

friends << user 

Cependant, je reçois l'erreur suivante:

ActiveRecord::StatementInvalid: Mysql::Error: Duplicate entry '18-18' for key 'no_duplicate_friends': INSERT INTO `users_users` (`friend_id`, `user_id`) VALUES (18, 18) 

Qu'est-ce qui se passe?

+0

utilisateur est pas un tableau – keruilin

+0

'friends' est le' user.friends'. D'accord. alors vous essayez d'ajouter le 'user' comme son propre' ami '? –

+0

Oui. Je voudrais qu'une exception soit levée si j'essayais d'enregistrer dans la base de données. Cependant, je veux juste ajouter l'utilisateur lui-même à son tableau d'amis dans le cadre d'une logique métier que je veux transmettre à un contrôleur. Ne pas enregistrer dans la base de données. – keruilin

Répondre

0

Si je comprends bien, vous essayez d'ajouter user comme ami de user, par exemple, vous avez user.id dans user_with_all_those_homies.

Je crois que quelque chose comme ce qui suit peut résoudre votre problème:

# assuming user_with_all_those_homies is an array of users 
user_with_all_those_homies.reject{ |u| u.id == user.id } 

Modifier

Ok, maintenant je compris:]

Avant d'enregistrer la base de données, retirez la user de friends tableau:

friends.reject{ |f| f.id == user.id } 
+1

user_with_all_those_homies n'est pas un tableau. – keruilin

Questions connexes