【问题标题】:Foreign Key in Rails - ErrorsRails 中的外键 - 错误
【发布时间】:2017-08-15 18:37:39
【问题描述】:

我正在尝试向我的客户表中添加一个新的外键列。这是我的迁移:

class AddCompanyForeignKeyToCustomers < ActiveRecord::Migration[5.1]
  def change
    add_reference :customers, :company, foreign_key: true
    add_foreign_key :customers, :companies
  end
end

这些是我得到的错误:

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateObject: ERROR:  constraint "fk_rails_ef51a916ef" for relation "customers" already exists
: ALTER TABLE "customers" ADD CONSTRAINT "fk_rails_ef51a916ef"
FOREIGN KEY ("company_id")
  REFERENCES "companies" ("id")

ActiveRecord::StatementInvalid: PG::DuplicateObject: ERROR:  constraint "fk_rails_ef51a916ef" for relation "customers" already exists
: ALTER TABLE "customers" ADD CONSTRAINT "fk_rails_ef51a916ef"
FOREIGN KEY ("company_id")
  REFERENCES "companies" ("id")

PG::DuplicateObject: ERROR:  constraint "fk_rails_ef51a916ef" for relation "customers" already exists

这是什么意思?我不知道 fk_rails_$NUMBER 是什么。

【问题讨论】:

    标签: ruby-on-rails postgresql foreign-keys


    【解决方案1】:

    这意味着您正在尝试创建一个复制您已有的外键约束。

    此行在引用companiescustomers 上创建外键约束,并创建company_id

    add_reference :customers, :company, foreign_key: true
    

    这一行正在尝试再次做外键约束

    add_foreign_key :customers, :companies
    

    只需删除一个或另一个,这取决于您是否还需要添加company_id

    【讨论】:

      【解决方案2】:

      您尝试通过调用add_referenceadd_foreign_key 添加两次外键。文档会告诉你更多,但基本上 add_foreign_key 添加一个键和 add_reference 可以添加一个外键(你在上面的代码中使用 foreign_key: true ),所以你应该只使用一个或其他。

      如果我是你,我只会使用 add_foreign_key,它似乎更适合你想要做的事情:

      class AddCompanyForeignKeyToCustomers < ActiveRecord::Migration[5.1]
        def change
          add_foreign_key :customers, :companies
        end
      end
      

      【讨论】:

        猜你喜欢
        • 2015-06-16
        • 1970-01-01
        • 1970-01-01
        • 2014-06-23
        • 2012-12-19
        • 2014-12-07
        相关资源
        最近更新 更多