спасение от Mysql2 :: Ошибка - PullRequest
17 голосов
/ 16 июня 2011

У меня простой вопрос.У меня есть таблица соединения, которая имеет индекс, который гарантирует, что (столбец 1, столбец 2) уникален.

Я добавляю в эту таблицу, используя gem mysql2, и пытаюсь поймать Mysql2 :: Error, если попыткаприводит к ошибке дублированного ключа.В то время как я получаю ошибку дублирующего ключа, мое тело спасения не выполняется.

begin
  self.foo << bar
rescue Mysql2::Error
  logger.debug("#{$!}")
end

Я получаю следующую ошибку при выполнении self.foo << bar

Mysql2 :: Ошибка: Дублирующая запись '35455-6628' для ключа 'index_foos_bars_on_foo_id_and_bar_id': INSERT INTO foos_bars (foo_id, bar_id) ЗНАЧЕНИЯ (35455, 6628)

НО мое заявление о спасении не попало!Исключение не может быть успешно спасено от.Что я делаю неправильно?Если я удаляю Mysql2 :: Error и спасаю для всего, то это работает.Но это плохая практика - я просто хочу спасти от Mysql2 :: Ошибка, которая в случае дублирования записи.

Спасибо,

1 Ответ

20 голосов
/ 16 июня 2011

Mysql2::Error теперь находится в другом классе исключений.Измените свой код на:

begin
  self.foo << bar
rescue Exception => e      # only for debug purposes, don't rescue Exception in real code
  logger.debug "#{e.class}"
end

... и вы увидите реальный класс исключений, который вам нужно спасти.

Редактировать: Кажется, в этомслучай оказался ActiveRecord::RecordNotUnique

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...