修改联接表以引用其他表并重命名

时间:2018-09-22 15:31:28

标签: elixir ecto

我目前有一个名为leagues_questions的表,但是在开发过程中我意识到该表应称为seasons_questions并引用season表而不是question表。我正在努力了解进行此更改的最佳方法。我的第一个想法是创建一个将修改此表的新迁移。这是我的尝试:

旧迁移:

def change do
  create table(:leagues_questions, primary_key: false) do
    add :id, :uuid, primary_key: true
    add :league_id, references(:leagues, on_delete: :nothing, type: :uuid), null: false
    add :question_id, references(:questions, on_delete: :nothing, type: :uuid), null: false

    timestamps()
  end
end

新迁移:

def change do
  alter table(:questions_leagues) do
    modify :question_id, :season_id
  end
end

我还需要更改表名,但我认为我可以处理。

我认为这行不通,我什至还没有尝试过,因为我不知道如何更改references部分。有人知道我如何在迁移中修改表的引用列吗?谢谢!

1 个答案:

答案 0 :(得分:1)

要重命名该列

rename table(:leagues_questions), :question_id, to: :season_id

然后您需要处理外键约束

我假设您已经尝试过:

alter table(:leagues_questions) do
  modify :season_id, references(:seasons, on_delete: :nothing, type: :uuid), null: false)
end

,但没有用。您需要这样做:

drop constraint("leagues_questions", :leagues_questions_question_id_fkey)
alter table(:leagues_questions) do
  modify :season_id, references(:seasons, on_delete: :nothing, type: :uuid), null: false)
end

首先基本删除现有约束。