Jor*_*Kok 1 elixir phoenix-framework
在凤凰框架中
def show(conn, %{"id" => id}) do
json conn, Repo.get(User, id)
end
Run Code Online (Sandbox Code Playgroud)
匹配正常,但使用:符号不匹配模式
def show(conn, %{"id": id}) do
json conn, Repo.get(User, id)
end
Run Code Online (Sandbox Code Playgroud)
当我从测试中调用以下代码时
conn
|> get(user_path(conn, :show, user.id))
|> json_response(200)
Run Code Online (Sandbox Code Playgroud)
%{key: value}是Atom钥匙的简称,而不是String钥匙.让我们澄清一些事情:
:"a" == "a"
# => false
:"a" == :a
# => true
%{:a => 1} == %{"a": 1}
# => true
Run Code Online (Sandbox Code Playgroud)
因此,当你写作时%{"id": id},它意味着:%{id: id}哪个不是 %{"id" => id},因为你的参数图没有:id键,所以它不匹配.
作为旁注,我实际上写了一个插件,在Phoenix控制器中使用原子键来保持params匹配简短和甜蜜.