Спасение от Mysql2:: Ошибка

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

Я добавляю в эту таблицу с помощью mysql2 gem и пытаюсь поймать 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:: Ошибка и спасет все, то это сработает. Но это плохая практика - я просто хочу избавиться от Mysql2:: Error, которая в случае дублирования записи.

Спасибо,

Ответы

Ответ 1

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

begin
  self.foo << bar
rescue Exception => e
  logger.debug "#{e.class}"
end

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

Edit: Кажется, в этом случае это оказалось ActiveRecord::RecordNotUnique