如何检查是否未加载关联?

Teo*_*ing 11 ecto

我可以使用什么功能来检查是否已加载关联?检查是否加载了关联而不是尝试使用它并获得Ecto.Association.NotLoaded错误会很好.

小智 10

您可以使用 assoc_loaded?

参考:https: //hexdocs.pm/ecto/Ecto.html#assoc_loaded?1


nas*_*rca 6

不确定是否有内置函数来检查这个,但你可以这样编写自己的函数:

defmodule PreloadCheck do
  def is_preloaded(model, assoc) do
    case Map.get(model, assoc) do
      %Ecto.Association.NotLoaded{} -> false
      _ -> true
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

assoc将是表示您的关联名称的原子.

使用模式匹配case可以检查您的关联是否已加载或者是否仍在返回Ecto.Association.NotLoaded结构.

  • 是的,您可以使用`Ecto.assoc_loaded?;;)它会返回布尔值,表示是否已加载。我只是不确定该功能可用的确切时间,至少对于2.1.4版本可用。 (2认同)