gpt4 book ai didi

elixir - 迁移以更改引用列上的 on_delete 选项

转载 作者:行者123 更新时间:2023-12-02 07:23:38 25 4
gpt4 key购买 nike

我正在和 Phoenix 一起玩,并建立了 has_many 关联。我通常将 on_delete: :delete_all 作为引用列的选项。但是,如果我改变主意并想稍后更改 nilify_all,有没有办法在迁移内部实现此目的?

创建表的迁移:

  def change do
create table(:messages) do
add :body, :text
add :sender_id, references(:users, on_delete: :delete_all)

timestamps()
end
create index(:messages, [:sender_id])

end

我正在寻找这样的东西:

def change do
change_options table(:messages), :user_id, on_delete: :nilify_all
end

我见过modifyalter但我没有看到任何有关 on_delete 的内容。也许无法通过迁移实现?

最佳答案

您可以为此使用modify,在新的type中传递新的on_delete选项,但我遇到了this bug在尝试此操作时,解决方法是首先手动DROP约束。您还需要指定 updown 版本,因为 modify 是不可逆的。

def up do
execute "ALTER TABLE posts DROP CONSTRAINT posts_user_id_fkey"
alter table(:posts) do
modify(:user_id, references(:users, on_delete: :delete_all))
end
end

def down do
execute "ALTER TABLE posts DROP CONSTRAINT posts_user_id_fkey"
alter table(:posts) do
modify(:user_id, references(:users, on_delete: :nothing))
end
end

关于elixir - 迁移以更改引用列上的 on_delete 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43954265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com