2011-06-16 105 views
15

我有一個簡單的問題。我有一個連接表有一個索引,確保(col 1,col 2)是唯一的。從Mysql2拯救::錯誤

我正在使用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_barsfoo_idbar_id)VALUES(35455, 6628)

但是我的救援聲明沒有被擊中!例外情況不能成功救出。我究竟做錯了什麼?如果我刪除Mysql2 :: Error並解決所有問題,那麼它就可以工作。但是這是不好的做法 - 我只是想從Mysql2 :: Error中解救出現重複條目​​的情況。

感謝,

+0

你檢查你的日誌,當你拯救一切,並確保Mysql2 ::錯誤是完全正確的資本化和一切爲了什麼被拋出? – jdc 2011-06-16 13:19:11

+0

我記錄了異常,它是Mysql2的類型::錯誤 – deruse 2011-06-16 15:15:22

回答

18

Mysql2::Error現在被包裹在另一個異常類。將您的代碼更改爲:

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

...然後您將看到您需要拯救的真正異常類。

編輯:看來,在這種情況下,它竟然是ActiveRecord::RecordNotUnique

+7

ActiveRecord :: RecordNotUnique,謝謝! – deruse 2011-06-17 21:17:29

+0

不客氣:) – smathy 2011-06-17 21:22:51

+1

這工作謝謝。 – Abram 2016-03-01 20:52:16