Obwohl ich das Bestehen der Abfrage von this answer wie dies inspiriert Repository:Warum bekomme ich das Protokoll Enumerable nicht implementiert für # Ecto.Query?
teams_users = Repo.all (from(t in Team, where: t.owner_id == ^user_id))
|> Enum.each(&team_users/1)
def team_users (team) do
%{id: id} = team
Repo.all (from(tu in TeamUser, where: tu.team_id == ^id))
end
Allerdings habe ich diesen Fehler habe:
[error] GenServer #PID<0.450.0> terminating
** (Protocol.UndefinedError) protocol Enumerable not implemented for #Ecto.Query<from t in App.Team, where: t.owner_id == ^1>
(elixir) lib/enum.ex:1: Enumerable.impl_for!/1
(elixir) lib/enum.ex:116: Enumerable.reduce/3
(elixir) lib/enum.ex:1477: Enum.reduce/3
(elixir) lib/enum.ex:609: Enum.each/2
(App) web/channels/user_channel.ex:93: App.UserChannel.handle_in/3
(phoenix) lib/phoenix/channel/server.ex:223: Phoenix.Channel.Server.handle_info/2
(stdlib) gen_server.erl:615: :gen_server.try_dispatch/4
(stdlib) gen_server.erl:681: :gen_server.handle_msg/5
(stdlib) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Was ich versuche zu tun, alle Teams zu bekommen, dann holen Sie sich die Benutzer jedes Teams, dann erwarte ich, alle Benutzer in einem Array zu haben.
Vermisse ich etwas? irgendein Rat? Gibt es einen besseren Weg, dies zu erreichen?
Aber wie würde ich die Zuordnung definieren: team_users in Schema Team? Ich benutze ecto 3.0-rc, und ich habe bereits eine viele zu viele Tabelle, aber ich habe keine Assoziationen in meinem Team, Benutzer-Schemas .. – simo
https://hexdocs.pm/ecto/Ecto.Schema.html hinzugefügt # has_many/3 und https://hexdocs.pm/ecto/Ecto.Schema.html#belongs_to/3 sollten Ihnen helfen. – Gazler
Ich kann 'besides_to' nicht zum Benutzer hinzufügen, da es keine' table_id' hat, ich benutze eine andere Tabelle 'team_user', um Team und Benutzer zu verknüpfen, die' user_id, team_id' hat, wie würde ich die Viele-zu-Viele-Verknüpfung definieren? – simo