这很好用:
a1 = Repo.get_by(MyModel, var1: var1)
a2 = Repo.preload(a1, [:aaa, bbb: :ccc]).items
Run Code Online (Sandbox Code Playgroud)
但这引发了一个例外:
Repo.get_by(MyModel, var1: var1) |> Repo.preload([:aaa, bbb: :ccc]).items
# or this
# a2 = Repo.get_by(MyModel, var1: var1) |> Repo.preload([:aaa, bbb: :ccc]).items
Run Code Online (Sandbox Code Playgroud)
存在:
** (UndefinedFunctionError) function MyApp.Repo.preload/1 is undefined or private. Did you mean one of:
* preload/2
* preload/3
Run Code Online (Sandbox Code Playgroud)
怎么了?
您的代码目前解析为:
Repo.get_by(MyModel, var1: var1) |> (Repo.preload([:aaa, bbb: :ccc]).items)
Run Code Online (Sandbox Code Playgroud)
也就是说,首先Repo.preload用1参数调用,然后items提取其字段,然后管道发生,这不起作用.
您可以通过将管道包装在括号中来解决此问题:
(Repo.get_by(MyModel, var1: var1) |> Repo.preload([:aaa, bbb: :ccc])).items
Run Code Online (Sandbox Code Playgroud)
或使用Map.get或Map.fetch!提取items密钥:
Repo.get_by(MyModel, var1: var1) |> Repo.preload([:aaa, bbb: :ccc]) |> Map.fetch!(:items)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |