ruby-on-rails – 从Mysql2 :: Error中救出

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 从Mysql2 :: Error中救出前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个简单的问题.我有一个连接表,它有一个索引,确保(col 1,col 2)是唯一的.

我正在使用MysqL2 gem添加到该表中,如果尝试导致重复的键错误,我试图捕获MysqL2 :: Error.当我得到重复键错误时,我的救援机构没有被执行.

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

执行self.foo<<<<酒吧 MysqL2 :: Error:键’index_foos_bars_on_foo_id_and_bar_id’的重复条目’35455-6628’:INSERT INTO foos_bars(foo_id,bar_id)VALUES(35455,6628) 但是我的救援声明没有被击中!这个例外是不能被成功救出的.我究竟做错了什么?如果我删除MysqL2 :: Error并抢救一切,那么它的工作.但这是不好的做法 – 我只想从MysqL2 :: Error中拯救一次,如果是重复的条目. 谢谢,

解决方法

MysqL2 :: Error现在包装在另一个异常类中.将您的代码更改为:
begin
  self.foo << bar
rescue Exception => e
  logger.debug "#{e.class}"
end

…你会看到需要拯救的真正的异常类.

编辑:在这种情况下,它似乎是ActiveRecord :: RecordNotUnique

猜你在找的Ruby相关文章