我有几个 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
在协会的两边。但是,当我两次尝试关联一个对象时,我的应用程序抛出 Mysql2::Error: Duplicate entry '1-9' for key...
错误,这是由 MySQL 生成的。有没有聪明的方法来处理这个问题?
我考虑过几种可能的解决方案,但并不明智。我考虑过使用 :insert_sql
选项手动更改 INSERT 查询,但是对于 20 个关联表来说,这将需要大量工作。有没有更好的方法来处理这个问题?
最佳答案
uniq
选项不会非常努力地防止添加重复项 - 如果加载了关联,它将检查对象是否已经存在,但它不会加载关联检查。
最简单的事情可能是挽救 ActiveRecord::RecordNonUnique
并适本地处理它——无论你的 ruby 级别检查多么仔细,总是有机会被捕获到竞争条件通过数据库
关于ruby-on-rails - has_and_belongs_to_many 和关联表上的唯一索引生成 "Duplicate entry"失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8644252/