【问题标题】:has_and_belongs_to_many and unique index on association table generates "Duplicate entry" failhas_and_belongs_to_many 和关联表上的唯一索引生成“重复条目”失败
【发布时间】:2011-12-27 11:43:23
【问题描述】:

我有几个 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 个关联表来说将是很多工作。有没有更好的方法来解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    uniq 选项不会非常努力地防止添加重复项 - 如果加载了关联,它将检查对象是否已经存在,但不会加载关联只是为了检查。

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

    【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多