2011-06-16 6 views
15

私は簡単な質問があります。私は、(col 1、col 2)が一意であることを保証するインデックスを持つ結合テーブルを持っています。Mysql2 :: Errorから救助

mysql2 gemを使用してそのテーブルに追加していますが、その結果、重複したキーエラーが発生した場合は、Mysql2 :: Errorをキャッチしようとしています。重複キーエラーが発生している間、私のレスキュー本体は実行されていません。

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

私はself.foo << bar

Mysql2 ::エラー実行時に以下のエラーが発生します:キー 'index_foos_bars_on_foo_id_and_bar_id' の重複エントリ '35455から6628を':foos_barsfoo_idbar_id)VALUES(35455、。INSERT INTO 6628)

私のレスキューステートメントはヒットしていません!例外は正常に救済されません。私は間違って何をしていますか? Mysql2 :: Errorを削除してすべてを救済すると、動作します。しかし、それは悪い習慣です - 私はちょうどMysql2から救助したい:: Errorは、重複したエントリのイベントです。

おかげで、

+0

であることが判明し、この場合に思えるを確認しており、確かMysql2を作っ::エラーがスローされているもののために正確に正しい大文字小文字、すべてのですか? – jdc

+0

私は例外を記録しており、それはタイプMysql2 :: Error – deruse

答えて

18

Mysql2::Errorは現在、別の例外クラスに包まれています。コードを次のように変更してください:

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

...あなたが救済する必要がある実際の例外クラスが表示されます。

編集:あなたはすべてを救出しているとき、あなたはあなたのログをそれはActiveRecord::RecordNotUnique

+7

です。ActiveRecord :: RecordNotUnique、ありがとう! – deruse

+0

あなたは大歓迎です:) – smathy

+1

これは感謝しました。 – Abram

関連する問題