【发布时间】:2016-12-20 02:42:42
【问题描述】:
我有3级层次模型关系,即model1属于model2,model2属于model3。
我正在尝试为model1 预加载model2 和model3:
my_models = Repo.all(Model1)
|> Enum.map(fn (x) ->
Repo.preload(x, :model2)
end)
|> Enum.map(fn(x) -> # error "no function clause matching in Ecto.Repo.Preloader.preload/4"
Repo.preload(x.model2, :model3)
end)
错误是“Ecto.Repo.Preloader.preload/4中没有函数子句匹配”
【问题讨论】:
-
你为什么要在
Enum.map中预加载?这违背了预加载的全部目的。为什么不Repo.all(Model1) |> Repo.preload(model2: [:model3])? -
@Dogbert,预加载不只对单个实体起作用吗?
-
不,也适用于列表,还支持有效地加载嵌套关联。
-
@Dogbert,这不起作用,它们没有被预加载。是因为它是从“属于”而不是“has_many”的文档吗?
标签: elixir phoenix-framework ecto