Зачем получать ошибки активной записи при попытке работать с массивами? - PullRequest
0 голосов
/ 20 мая 2010

У меня есть следующая ассоциация в моей модели User:

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

У меня есть следующее ограничение уникальности в моей таблице user_users:

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

В моем коде я получаю друзей пользователя -> friends = user.friends. друзья это массив.

У меня есть сценарий, в котором я хочу добавить пользователя со всеми этими друзьями в массив друзей. Пример:

friends << user

Однако я получаю следующую ошибку:

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

Что дает?

1 Ответ

0 голосов
/ 20 мая 2010

Если я правильно понял, вы пытаетесь добавить user в друзья user, т.е. у вас есть user.id в user_with_all_those_homies.

Я полагаю, что что-то вроде следующего может решить вашу проблему:

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

Редактировать

Хорошо, теперь я понял:]

Перед сохранением в базе данных удалите массив user из friends:

friends.reject{ |f| f.id == user.id }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...