关联表上has_and_belongs_to_many唯一索引生成"Duplicate entry"失败



我有几个has_and_belongs_to_many关联,我还在关联中使用了uniq选项,以避免与重复键相关的MySQL错误。我的联想是这样的:

has_and_belongs_to_many :people, :uniq => true

我添加的索引是一个划分的主键,我使用:

add_index :table_name, [:key_1, :key_2], :unique => true
关联的两边都有

。但是当我尝试关联对象两次时,我的应用程序抛出由MySQL生成的Mysql2::Error: Duplicate entry '1-9' for key...错误。有什么聪明的方法来处理这个问题吗?

我已经想到了几种可能的解决方案,但都不聪明。我考虑过通过使用:insert_sql选项手动更改INSERT查询,但是对于20个关联表来说,这将是大量的工作。有没有更好的办法来解决这个问题?

uniq选项并没有努力阻止重复的添加-如果关联被加载,它会检查对象是否已经在那里,但它不会加载关联只是为了检查。

最简单的事情可能是挽救ActiveRecord::RecordNonUnique并适当地处理它-无论您的ruby级别检查多么仔细,总是有机会被数据库捕获竞争条件

最新更新