管道操作员不工作

时间:2018-04-07 06:55:18

标签: elixir ecto

这很有效:

a1 = Repo.get_by(MyModel, var1: var1)   
a2 = Repo.preload(a1, [:aaa, bbb: :ccc]).items   

但这引发了一个例外:

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

感:

** (UndefinedFunctionError) function MyApp.Repo.preload/1 is undefined or private. Did you mean one of:

      * preload/2
      * preload/3

它有什么用?

1 个答案:

答案 0 :(得分:6)

您的代码目前解析为:

Repo.get_by(MyModel, var1: var1) |> (Repo.preload([:aaa, bbb: :ccc]).items)

即,首先使用1个参数调用Repo.preload,然后提取其items字段,然后管道发生,这不起作用。

您可以通过将管道包装在括号中来解决此问题:

(Repo.get_by(MyModel, var1: var1) |> Repo.preload([:aaa, bbb: :ccc])).items

或使用Map.getMap.fetch!提取items密钥:

Repo.get_by(MyModel, var1: var1) |> Repo.preload([:aaa, bbb: :ccc]) |> Map.fetch!(:items)