在 Phoenix 框架中
def show(conn, %{"id" => id}) do
json conn, Repo.get(User, id)
end
匹配良好,但使用
:
符号与模式不匹配def show(conn, %{"id": id}) do
json conn, Repo.get(User, id)
end
当我从测试中调用以下代码时
conn
|> get(user_path(conn, :show, user.id))
|> json_response(200)
最佳答案
%{key: value}
是 Atom
的简写键,而不是 String
键。 让我们澄清一些事情:
:"a" == "a"
# => false
:"a" == :a
# => true
%{:a => 1} == %{"a": 1}
# => true
所以当你写
%{"id": id}
,意思是:%{id: id}
这是 不是 %{"id" => id}
,并且由于您的参数映射没有 :id
关键,它不匹配。作为旁注,我实际上写了一个 Plug在 Phoenix Controller 中使用原子键来保持参数匹配简短。
关于elixir - => 和 : in an Elixir map? 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53025466/