使用 Elixir Ecto,如何在迁移中添加 has_many 关系?

With Elixir Ecto, how do I add a has_many relationship in a migration?

我想写这样的东西:

defmodule JobHunt.Repo.Migrations.CompaniesHaveManyJobs do
  use Ecto.Migration

  def change do
    alter table (:companies) do
      add :jobs, :has_many, Job
    end
  end
end

运行 mix ecto.migrate 此迁移会出错,那么正确的方法是什么?

您应该将所需的外键添加到作业 table:

defmodule JobHunt.Repo.Migrations.CompaniesHaveManyJobs do
  use Ecto.Migration

  def change do
    alter table(:jobs) do
      add :company_id, :integer
    end
  end
end

我们可以按照文档的建议使用这种方式:

alter table(:jobs) do
  add :company_id, references(:companies)
end

我不确定这里是否需要复数形式:references(:companies) 但它不适用于 phermacy(单数)