在Rails中添加外键

时间:2018-12-13 16:18:12

标签: mysql ruby-on-rails foreign-keys database-migration

我有两个表casino_usersaccounts

我想将casino_users.username用作引用accounts.email的外键。

我尝试过:

class AddForeignKeyToCASinoUsers < ActiveRecord::Migration[5.2]
  def up
    add_foreign_key :casino_users, :accounts, column: :username, primary_key: "email"
  end 

  def down
    remove_foreign_key :casino_users, column: :username
  end 
end

但是它给了我一个错误Cannot add or update a child row: a foreign key constraint fails

我使用的语法是否有问题?

1 个答案:

答案 0 :(得分:1)

首先猜测是您现有表中的数据与您现在添加的约束不兼容。如果那似乎不是问题,那么最好提供更多有关此错误发生时间的上下文。当您尝试运行迁移时,这就是我的假设。

PS您可能会因尝试使用集合上的主键而遇到麻烦,该主键在语法上是有意义的,并且可能会发生变化。如果您将主键设置为id,并通过id将用户链接到帐户,那么您将有一个更轻松的时间,例如,某天您希望允许用户更改其电子邮件地址。如果要确保有一个与电子邮件地址关联的帐户,该帐户很容易实现,并且在电子邮件字段上具有唯一约束即可。