2016-04-11 7 views
3

Was ist der korrekte Weg, um Fremdschlüssel zu implementieren, die sich bei einer Ecto-Migration auf ihre eigene Tabelle beziehen?Elixir Ecto: Wie erstelle ich einen selbstreferentiellen Fremdschlüssel?

z.B. Ich möchte eine Tabelle erstellen, in der jede Zeile auf eine "Eltern" -Zeile in derselben Tabelle verweisen kann. (Eine Möglichkeit, hierarchische Daten zu tun, es gibt viele andere Möglichkeiten.)

Aber wenn ich dies habe in meinem changeset, erhalte ich viele Fehler, wenn mix ecto.migrate ausgeführt wird:

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 

Die Fehlermeldung beginnt mit (UndefinedFunctionError) undefined function Ecto.Migration.Reference.fetch/2 (Ecto.Migration.Reference does not implement the Access behaviour) bevor GenServer beendet wird. (Dies tritt unter ecto 1.1.5 und 2.0.0-beta2 auf.)

Antwort

4

Und die Antwort war ein einfacher Fehler: Der Versuch, den Spaltentyp für eine Fremdschlüsselspalte anzugeben, verursacht einen Fehler. Die korrekte Syntax lautet (beachten Sie das fehlende :integer Atom):

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 
Verwandte Themen