5

私はレールアプリに取り組んでおり、次のエラーが頻繁に発生しています。

Mysql2::Error: Duplicate entry '3022093-2000000028003-visited' for key 'unique_user_place_relationship'

問題の原因を次の行に絞り込みましたが、

begin
  up = UserPlace.new(user_place_params)
  up.skip_logging
  up.save!
rescue ActiveRecord::RecordNotUnique => e
  Rails.logger.warn(e)
end

私のテーブルには、次のインデックスがあります。

key_name                         seq_in_index    column_name
unique_user_place_relationship   1               user_id
unique_user_place_relationship   2               place_id
unique_user_place_relationship   3               relationship

validate_uniqueness_ofにuser_id 、 place_id 、および関係がないという問題はありますuser_place.rbか?

私の理解でActiveRecord:RecordNotUniqueは、トランザクションがデータベース レベルでインデックスの制約を満たしていないため、このエラーをキャッチする必要があります。

4

2 に答える 2

2

追加の問題はよくわかりvalidates_uniqueness_ofませんが、本当にそれを使用したくない場合で、rescueが例外をキャッチしていないと言っている場合は、すべてを一緒に削除ActiveRecord::RecordNotUnique => eして、その場合に例外をキャッチするかどうかを確認してください。

次のようなものを試してください。

rescue Exception => e
  if e.is_a? ActiveRecord::RecordNotUnique
    Rails.logger.warn(e)
  end
于 2013-03-06T22:20:20.343 に答える