ruby-on-rails - has_and_belongs_to_many 和关联表上的唯一索引生成 "Duplicate entry"失败

标签 ruby-on-rails activerecord ruby-on-rails-3.1 associations

我有几个 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/

相关文章:

sql - 如何在 Postgres 中查询以按创建月份对记录进行分组? ( :created_at datetime column)

ruby-on-rails - 是否可以在不使用 respond_to 方法和使用非常规文件名的情况下呈现 js.erb?

ruby-on-rails - rails 3.2.8 中未定义的 read_inheritable_attribute

ruby - 使用嵌入文档时的 ActiveRecord 嵌套验证 : Mongoid

jquery - 使用 jQuery 和 Ruby on Rails 制作一个简单的 ajax post

ruby-on-rails - 进行大型事务时 Validates_uniqueness_of 不起作用

ruby-on-rails - Rails 3.1 ckeditor

ruby-on-rails - Rails 3.1 使用 app/assets/images/subdirectory 下的图像

ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB?

ruby-on-rails - 为 rails 扩展 actioncontroller 的插件