ruby on rails - rescatando de mysql2:: error
ruby-on-rails exception (1)
Tengo una pregunta simple. Tengo una tabla de unión que tiene un índice que asegura que (col 1, col 2) es único.
Estoy agregando a esa tabla el uso de mysql2 gema y estoy intentando capturar Mysql2 :: Error si el intento produce un error de clave duplicada. Mientras recibo el error de clave duplicada, mi cuerpo de rescate no se está ejecutando.
begin
self.foo << bar
rescue Mysql2::Error
logger.debug("#{$!}")
end
Recibo el siguiente error al ejecutar self.foo << bar
Mysql2 :: Error: Duplique la entrada ''35455-6628'' para la clave ''index_foos_bars_on_foo_id_and_bar_id'': INSERT INTO foos_bars
( foo_id
, bar_id
) VALUES (35455, 6628)
¡PERO mi declaración de rescate no está siendo golpeada! La excepción no se puede rescatar con éxito. ¿Qué estoy haciendo mal? Si quito Mysql2 :: Error y rescate para todo, entonces funciona. Pero eso es una mala práctica, solo quiero rescatar de Mysql2 :: Error que, en el caso de una entrada duplicada.
Gracias,
Mysql2::Error
está envuelto en otra clase de excepción ahora. Cambia tu código a:
begin
self.foo << bar
rescue Exception => e # only for debug purposes, don''t rescue Exception in real code
logger.debug "#{e.class}"
end
... y verás la verdadera clase de excepción que necesitas rescatar.
Edit: Parece que en este caso resultó ser ActiveRecord::RecordNotUnique