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

时间:2016-06-27 06:47:42

标签: ecto

我可以使用什么功能来检查是否已加载关联? 最好检查是否加载了关联,而不是尝试使用它并导致Ecto.Association.NotLoaded错误。

3 个答案:

答案 0 :(得分:10)

您可以使用assoc_loaded?

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

答案 1 :(得分:5)

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

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

此处assoc将是表示您的关联名称的原子。

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

答案 2 :(得分:0)

您可以像上面评论中提到的Eduardo一样使用Ecto.assoc_loaded?/ 1。 assoc_loaded?/1 documentation