2017-12-04 5 views
0

Während ich ein League erstellen, versuche ich auch eine Join-Zuordnung namens UsersLeagues zu erstellen. Hier ist mein aktueller Versuch:Erstellen Sie zwei Modelle mit einem erstellen

def changeset(struct, params \\ %{}) do 
    struct 
     |> cast(params, [:name]) 
     |> validate_required([:name]) 
     |> put_assoc(:users_leagues,UsersLeagues.changeset(%UsersLeagues{}, user_id: 1, league_id: 1, commissioner: true)) 
end 

Wenn ich versuche, mit diesem Changeset zu erstellen, bekomme ich diesen Fehler. expected params to be a :map, got: [user_id: 1, league_id: 1, commissioner: true]

Ich bin mir nicht sicher, was es mir sagen will?

Wieder versuche ich, ein Modell zu erstellen und in diesem Prozess eine Join-Tabelle zu erstellen.

+0

Um diesen Fehler zu beheben, versuchen Sie '% {user_id: 1, ...}' anstelle von 'user_id: 1, ...'. Nicht sicher, ob der Rest stimmt. – Dogbert

+0

Es ist immer noch ein Fehler aufgetreten: # Ecto.Changeset , valide ?: false> – Bitwise

+0

Ich kann jetzt nicht testen, aber wickelt das Changeset in einer Liste ab? 'put_assoc (: users_leagues, [UsersLeagues.changeset (...)])'? – Dogbert

Antwort

1
def changeset(struct, params \\ %{}) do 
struct 
    |> cast(params, [:name]) 
    |> validate_required([:name]) 
    |> put_assoc(:users_leagues,UsersLeagues.changeset(%UsersLeagues{user_id: 1, league_id: 1, commissioner: true})) 
end 

versuchen dieses

Changeset verwendet wird, um Daten zu validieren, bevor sie in die Datenbank einzufügen.

+0

Das scheint nicht zu funktionieren. Wenn ich mir meinen fehlerhaften Änderungssatz anschaue, erhalte ich folgende Fehlermeldung: # Ecto.Changeset , gültig ?: false> – Bitwise

+0

Dieser Fehler bedeutet wahrscheinlich, dass Ihr UsersLeagues.changeset ungültig ist. Ecto kann den Join-Record erstellen, ohne viel zu intervenieren, und irgendwie scheint die user_id: 1, league_id: 1, nicht richtig zu sein. Schwer zu sagen mehr ohne die Schemas und Migrationen zu sehen. In diesem kostenlosen E-Book gibt es ein schönes Beispiel von many_to_many in den Kapiteln 8 und 9. http://pages.plataformatec.com.br/ebook-whats-new-in-ecto-2-0 – voger

0

Das zweite Argument zu UserLeagues soll eine Karte sein, aber es ist eine Keyword-Liste. Ändern Sie die vorletzte Zeile wie folgt:

|> put_assoc(:users_leagues,UsersLeagues.changeset(%UsersLeagues{}, %{user_id: 1, league_id: 1, commissioner: true})) 
Verwandte Themen