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

ijt*_*ijt 7 elixir ecto

我想写这样的东西:

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

  def change do
    alter table (:companies) do
      add :jobs, :has_many, Job
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*oth 9

我们可以使用这种方式,因为文档建议:

alter table(:jobs) do
  add :company_id, references(:companies)
end
Run Code Online (Sandbox Code Playgroud)

我不确定这里是否需要复数版本:references(:companies)但它对我来说不起作用phermacy(单数)


Jos*_*lim 8

您应该将所需的外键添加到jobs表:

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

  def change do
    alter table(:jobs) do
      add :company_id, :integer
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 使用引用更好,是的. (7认同)
  • @Jose为什么是:整数而不是`references(:comapnies)`?这有什么明显的区别吗? (3认同)
  • 好点子.这会更新数据库.为了使它可以从Ecto访问,我将`belongs_to:company,JobHunt.Company`添加到`web/models/job.ex`中的schema部分. (2认同)