在rails迁移中添加:on_delete到已存在的foreign_key

Fil*_*uzi 6 ruby database migration ruby-on-rails foreign-keys

我已经以这种方式创建了数据库中的现有外键:

class CreateUser < ActiveRecord::Migration
  def change
    create_table do ... end
    add_foreign_key :users, :admins, column: :admin_id
  end
end
Run Code Online (Sandbox Code Playgroud)

但忘了添加on_delete: :nullify.迁移已被推送并用于生产.我想添加新的迁移,这将为此PK约束添加cascale删除.怎么实现呢?

Fil*_*uzi 8

您可以在下次迁移中删除并添加外键:

class ChangeForgeinKeyOnUsersTable < ActiveRecord::Migration[5.0]
  def change
    remove_foreign_key :users, column: :admin_id
    add_foreign_key :users, :admins, column: :admin_id, on_delete: :nullify
  end
end
Run Code Online (Sandbox Code Playgroud)

  • @RicardoGreen我会做什么:1.重命名列(admin_id -&gt; admin_id_copy);2. 添加名为“admin_id”的新列,这次有约束。3. 将数据从 admin_id_copy 复制到 admin_id 列(您可以通过集合迭代迁移:),但请记住,对于大数据库,这将需要一段时间)。4.删除admin_id_copy表 (2认同)