Ich habe Teams und jedes Team hat Benutzer, so gibt es eine Join-Tabelle Benutzer-Teams als verknüpfen eine viele zu viele Beziehung, hier ist meine Modelle:Warum habe ich # Ecto.Association.NotLoaded?
defmodule App.Team do
use App.Web, :model
schema "teams" do
field :owner_id, :integer
has_many :team_users, {"team_user", App.TeamUser}
end
end
defmodule App.User do
use App.Web, :model
schema "users" do
# field :email, :string
has_many :team_user, App.TeamUser
end
end
Und hier ist das Modell anschließen:
defmodule App.TeamUser do
use App.Web, :model
@primary_key false
schema "team_user" do
belongs_to :user, App.User
belongs_to :team, App.Team
end
end
Wenn ich eine Abfrage ausführen, alle Teams eines Benutzers mit allen zu bekommen führte Benutzer-Teams, wie folgt aus:
teams_users =
from(t in Team, where: t.owner_id == ^user_id)
|> Repo.all()
|> Repo.preload(:team_users)
ich dieses Protokoll erhalten:
[%App.Team{__meta__: #Ecto.Schema.Metadata<:loaded>, id: 1,
is_base_team: true, owner_id: 3,
team_users: [%App.TeamUser{__meta__: #Ecto.Schema.Metadata<:loaded>,
team: #Ecto.Association.NotLoaded<association :team is not loaded>,
team_id: 1,
user: #Ecto.Association.NotLoaded<association :user is not loaded>,
user_id: 3},
%App.TeamUser{__meta__: #Ecto.Schema.Metadata<:loaded>,
team: #Ecto.Association.NotLoaded<association :team is not loaded>,
team_id: 1,
user: #Ecto.Association.NotLoaded<association :user is not loaded>,
user_id: 4},
%App.TeamUser{__meta__: #Ecto.Schema.Metadata<:loaded>,
team: #Ecto.Association.NotLoaded<association :team is not loaded>,
team_id: 1,
user: #Ecto.Association.NotLoaded<association :user is not loaded>,
user_id: 5}]}]
Im Protokoll habe ich Team mit der ID 1, und alle Benutzer mit ids: (3, 4, 5) Aber warum ich bekam user: #Ecto.Association.NotLoaded<association :user is not loaded>
? Ich habe nicht darum gebeten, den Benutzer bei dieser ID zu laden. Warum also habe ich eine solche Warnung bekommen?
ich verwende {:phoenix_ecto, "~> 3.0-rc}