在Rails迁移中为已有的外键添加:on_delete

11

我已经在数据库中创建了外键,创建方式如下:

class CreateUser < ActiveRecord::Migration
  def change
    create_table do ... end
    add_foreign_key :users, :admins, column: :admin_id
  end
end

但忘记添加on_delete: :nullify。迁移已经推送并在生产中使用。我想添加一个新的迁移,该迁移将为此主键约束添加级联删除。如何实现?

1个回答

15

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

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

1
{btsdaf} - Filip Bartuzi
1
@RicardoGreen我会这样做:1.重命名列(admin_id-> admin_id_copy); 2.添加具有约束条件的新列名称为“admin_id”。3.将数据从admin_id_copy复制到admin_id列(您只需在迁移中通过集合进行迭代:),但请记住,对于大型数据库,这将需要一些时间)。 4.删除admin_id_copy表。 - Filip Bartuzi
迁移数据真的必要吗?我认为这只是删除了约束,而不是整个列(数据)。 我使用的另一种方法是直接在SQL中完成所有操作(特定于Postgres):https://dev59.com/HGkv5IYBdhLWcg3wxjvQ - Malte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接