Ich möchte Benutzer Metadaten über die :meta
Karte in Phoenix Präsenz übergeben, um es von der JavaScript-Seite zugreifen. Genauer gesagt möchte ich in der Lage sein, Bilddateipfade (Strings) zu pushen und sie jedem Benutzer in meiner Anwesenheitsliste zuzuordnen. Die Dokumentation gibt dieses Beispiel für das Überschreiben der/2-Funktion holen Benutzermodelldaten in die :meta
Karte hinzuzufügen:Phönix Präsenz holen/2 überschreiben
def fetch(_topic, entries) do
query =
from u in User,
where: u.id in ^Map.keys(entries),
select: {u.id, u}
users = query |> Repo.all |> Enum.into(%{})
for {key, %{metas: metas}} <- entries, into: %{} do
{key, %{metas: metas, user: users[key]}}
end
end
Allerdings, wenn ich die entsprechenden Änderungen für meine User-Modell machen, bekomme ich Fehler in Bezug auf die Variablen u und die Funktion von/2 sowie cannot use ^Map.keys(entries) outside of match clauses
.
Ich suchte nach Beispielen für Leute, die ähnliche Sachen machen wollten und nichts auf Github finden konnten, das dem ähnelt, was ich hier versuche.
Wer hat eine Idee, wie ich die Fetch/2-Funktion umstrukturieren kann, so dass es richtig funktioniert? Ich habe ein einfaches Benutzermodell mit 3 Feldern, E-Mail, Passwort und Icon/Avatar Bild.
Versuchen Sie 'require Ecto.Query' am Anfang der Datei. Ihre Fehler sind typisch für diejenigen, die ich sehe, wenn ich die Datei nicht benötigt habe. Stellen Sie außerdem sicher, dass Sie 'Ecto.Query' importiert haben. –
Edit: Nein, das hat die Fehlercodes nicht geändert. Ich bekomme immer noch die 'Warnung: Variable" u "existiert nicht und wird zu" u() "erweitert, verwende bitte Klammern, um die Mehrdeutigkeit zu entfernen oder ändere den Variablennamen' als Hauptwarnung und die anderen, wenn ich es manuell eintippe in den repl, auch nach Ecto.Query und meinem Benutzermodell. – Abeltensor
'from' ist ein Ecto.Query-Makro. Sie müssen dies nicht in Controllern und Modellen tun, da es bereits in web.ex eingerichtet ist, wenn Sie beispielsweise "MyApp.Web,: controller" verwenden. –