(FunctionClauseError) Access.get/3 中没有匹配的函数子句

eli*_*elp 5 elixir

我是 Elixir 新手,目前正在通过 Ruby 进行交易。我正在努力解决遇到的错误,并且因为 Elixir 没有object.class,我正在努力了解我返回的数据类型以及如何对其进行故障排除。

不管怎样,我试图从 CSV 建立数据库,但收到错误

下面是我的代码

File.stream!('users_departs.csv')
|> Stream.drop(1)
|> CSV.decode(headers: [:name, :title, :departments])
|> Enum.take(10
|> Enum.each( fn(x) -> IO.inspect(x[:ok]) end )

 Error

** (FunctionClauseError) no function clause matching in Access.get/3

The following arguments were given to Access.get/3:

    # 1
    {:ok,
     %{
       departments: "Sales|Marketing",
       name: "John Smith",
       title: "Customer Service"
     }}

    # 2
    :ok

    # 3
    nil
(elixir) lib/access.ex:306: Access.get/3
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
(stdlib) erl_eval.erl:878: :erl_eval.expr_list/6
Run Code Online (Sandbox Code Playgroud)

我有 2 个模型,用户和部门,我想首先为部门播种,然后创建用户,然后关联用户-部门映射,但我很难通过这一步。

任何帮助将不胜感激

Yon*_* Hu 4

Access.get/3是一个 Elixir 函数,根据文档:

\n\n
\n

Access获取容器(实现行为的映射、关键字列表或结构)中给定键的值

\n
\n\n

检查错误消息,

\n\n
{:ok,\n   %{\n     departments: "Sales|Marketing",\n     name: "John Smith",\n     title: "Customer Service"}}\n
Run Code Online (Sandbox Code Playgroud)\n\n

不是 \xe2\x80\x9cmap、关键字列表或结构体等。\xe2\x80\x9d 它是一个tuple:ok ,由atom和map组成。

\n\n

看来,CSV.decode(headers: [:name, :title, :departments])回归了{:ok, value_decode}

\n\n

所以你不能按Enum.take/2原样通过管道传输它。

\n\n

只是

\n\n
{:ok, decode_csv} =\n  File.stream!(\'users_departs.csv\')\n  |> Stream.drop(1)\n  |> CSV.decode(headers: [:name, :title, :departments])\n\ndecode_csv\n|> Enum.take(10)\n|> Enum.each( fn(x) -> IO.inspect(x[:ok]) end )\n
Run Code Online (Sandbox Code Playgroud)\n