Elixir Ecto:如何创建自引用外键?

时间:2016-04-11 04:29:38

标签: elixir ecto

在Ecto迁移中实现引用自己的表的外键的正确方法是什么?

e.g。我想创建一个表,其中任何行可以引用同一个表中的“父”行。 (进行分层数据的一种方法;还有许多其他方法。)

但是当我在变更集中有这个时,我在运行mix ecto.migrate时会遇到很多错误:

create_if_not_exists table(:perms, prefix: :accts) do
  add :title, :string, size: 64, null: false
  add :description, :text
  add :parent_id, :integer, references(:perms)
end

在GenServer终止之前,错误消息以(UndefinedFunctionError) undefined function Ecto.Migration.Reference.fetch/2 (Ecto.Migration.Reference does not implement the Access behaviour)开头。 (这发生在ecto 1.1.5和2.0.0-beta2之下。)

1 个答案:

答案 0 :(得分:5)

答案是一个简单的错误:尝试指定外键列的列类型会导致错误。正确的语法是(注意缺少:integer原子):

create_if_not_exists table(:perms, prefix: :accts) do
  add :title, :string, size: 64, null: false
  add :description, :text
  add :parent_id, references(:perms)
end