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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...