Welche Funktion kann ich verwenden, um zu überprüfen, ob eine Verknüpfung bereits geladen ist? Es wäre nett zu prüfen, ob eine Verknüpfung geladen ist, anstatt zu versuchen, sie zu verwenden und Ecto.Association.NotLoaded
Fehler zu erhalten.Wie überprüft man, ob eine Assoziation nicht geladen ist?
6
A
Antwort
3
Nicht sicher, ob es eine eingebaute Funktion für diese zu überprüfen, aber Sie können Ihre eigene wie folgt schreiben:
defmodule PreloadCheck do
def is_preloaded(model, assoc) do
case Map.get(model, assoc) do
%Ecto.Association.NotLoaded{} -> false
_ -> true
end
end
end
Hier assoc
das Atom Ihr Verband Namen darstellt wäre.
Mithilfe der Mustererkennung in case
können Sie überprüfen, ob Ihre Verknüpfung geladen ist oder ob immer noch eine Ecto.Association.NotLoaded
-Struktur zurückgegeben wird. assoc_loaded?
Referenz
5
können Sie verwenden: https://hexdocs.pm/ecto/Ecto.html#assoc_loaded?/1
0
können Sie verwenden Ecto.assoc_loaded/1 wie Eduardo oben in den Kommentaren erwähnt?. assoc_loaded?/1 documentation
Danke. Ich schreibe am Ende eine Funktion, die einfach prüft, ob die Assoziation eine Liste ist, und diese als geladen zähle. Ich hoffe immer noch, dass es etwas eingebauter Funktion gibt, die das tut. –
Ja, Sie können 'Ecto.assoc_loaded?';) Verwenden, es wird ein Bool für geladen zurückgegeben oder nicht. Ich bin mir nur nicht sicher, wie lange die Funktion zumindest für Version 2.1.4 verfügbar ist. –
Wo wird diese Funktion geschrieben und wie wirkt sich das auf das Modell aus? Wenn Sie erklären können, wird das großartig sein –