2016-04-09 8 views
0

Ich habe derzeit ein "Rank" -Modell, das das Feld (ganze Zahl) "Rang" enthält, die eine ganze Zahl ist. Das "Ship" -Modell weist dagegen ein "usable_by" -Feld (Integer) auf. Was ich erreichen möchte, ist, dass wenn ich einen Rang zurückgebe, sie auch eine Liste aller Schiffsmodelle enthalten, in denen das Feld "usable_by" mit dem Feld "rank" im Rank-Modell übereinstimmt. Ich weiß, dass dies durch eine Abfrage machbar ist, und beziehe die Daten manuell ein, denke ich, aber ist irgendetwas in Ecto/Phoenix eingebaut, das ich verwenden kann, um dies einfacher zu machen?Ecto eins zu viele Assoziation auf benutzerdefinierte Felder

Ich denke, die ideale Situation, die ich hoffe, ist mit has_many (ich interessiere mich nicht wirklich für die umgekehrte Assoziation) mit etwas wie: Referenzen oder Foregin_key, aber ich kann nicht scheinen es zu arbeiten. Das ist die Linie i bin derzeit mit:

Rang Modell

schema "ranks" do 
    field :name, :string 
    field :rank, :integer 
    timestamps 

    has_many :ships, Playground.Ship #Can I use :foregin_key and :references here? 
end 

Antwort

0

Ich denke, Sie haben Ihre Antwort jetzt gefunden, aber wenn jemand anderes stolpert auf diese Antwort hinterlassen, ist dies:

has_many :ships, Playground.Ship, foreign_key: :usable_by

Auf diese Weise können Sie einen benutzerdefinierten Feldnamen in Ihrem zugeordneten Modell verwenden.

Sie sollten Referenzen in Ihrer Migration verwenden (wo Sie die Datenbank tatsächlich aktualisieren). Hier verhält sich die Playground.Ship wie eine Referenz auf ein bestimmtes Modell, :created_by ist der Name, der in der Beziehungszuordnung verwendet wird.