Ruby on rails Mysql2::错误:键的重复项--ActiveRecord::RecordNotUnique未捕获错误?
我正在使用rails应用程序,经常出现以下错误:Ruby on rails Mysql2::错误:键的重复项--ActiveRecord::RecordNotUnique未捕获错误?,ruby-on-rails,ruby-on-rails-3,exception-handling,Ruby On Rails,Ruby On Rails 3,Exception Handling,我正在使用rails应用程序,经常出现以下错误: 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::Recor
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
问题在于我的user\u place.rb中没有用户id、地点id和关系的验证唯一性?
据我了解,,ActiveRecord:RecordNotUnique
应该捕获此错误,因为事务不满足数据库级别的索引约束。不太确定添加验证的唯一性有什么问题,但是如果您确实不想使用它,并且您说rescue
没有捕获异常,尝试同时删除ActiveRecord::RecordNotUnique=>e
,看看它是否捕获了这种情况下的异常
请尝试以下操作:
rescue Exception => e
if e.is_a? ActiveRecord::RecordNotUnique
Rails.logger.warn(e)
end
报告说:
将此验证方法与
ActiveRecord::Validations#save
不保证没有
重复的记录插入,因为唯一性检查
应用程序级别天生容易受到竞争条件的影响。对于
例如,假设两个用户试图在同一时间发布评论
时间,并且注释的标题必须是唯一的。在数据库级别上
这些用户执行的操作可以在以下情况下交错进行
态度
是的,除了数据库级别的约束外,您还应该具有
的
验证唯一性。