ruby-on-rails exception mysql2

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