在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)
答案 0 :(得分:6)
%{key: value}
是Atom
键的简写,而不是String
键。让我们澄清一些事情:
:"a" == "a"
# => false
:"a" == :a
# => true
%{:a => 1} == %{"a": 1}
# => true
因此,当您编写%{"id": id}
时,其含义是:%{id: id}
不是不是 %{"id" => id}
,并且由于参数映射没有{{1} }键,它不匹配。
作为旁注,我实际上写了一个Plug来在Phoenix控制器中使用原子键来使参数匹配得简短而甜美。
答案 1 :(得分:0)
使用parseQuotedStrings
时,键是原子。当您使用:
时,键实际上就是类型。 =>
实际上只是%{key: val}
的糖。