ActiveRecord сохранить (false) все еще проверяет модель - PullRequest
1 голос
/ 16 июля 2009

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

validates_uniqueness_of :email

Эта модель действует как параноик. При уничтожении мне нужно удалить адрес электронной почты, чтобы, если пользователь хочет перерегистрировать, он мог. Для этого у меня есть следующее:

before_destroy :remove_email

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

Метод вызывается в соответствующее время, но метод save выдает следующую ошибку:

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

Так что похоже, что проверка все еще выполняется на каком-то уровне. Есть ли способ обойти это?

1 Ответ

2 голосов
/ 16 июля 2009

Я обнаружил проблему: у меня был уникальный индекс по электронной почте. Если вы получили эту ошибку, проверьте ваш schema.db на наличие уникальных индексов. Подсказка в том, что Mysql создает исключение, а не рельсы.

Как говорится: «SELECT не сломан».

...