Bit*_*ise 2 elixir phoenix-framework
我正在学习长生不老药,有一件事我不明白你看到地图作为函数参数的风格。你看到的最常见的地方是在这样的控制器中:
控制器def create(conn, %{"league" => league_params}) do
league = %League{}
|> League.changeset(league_params)
|> Repo.insert()
case league do
{:ok, league} ->
conn
|> put_flash(:info, "League Created Successfully.")
|> redirect(to: page_path(conn, :index))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
Run Code Online (Sandbox Code Playgroud)
所以,create/2功能。第二个参数看起来像这样%{"league" => league_params}。如果我错了,请纠正我,但这是一张地图,那么为什么我们引用下面的值League.changeset(league_params)而不是键League.changeset("league")呢?
这似乎是一个愚蠢的问题,但我无法弄清楚这个问题,而且我找不到这个问题的文档。谢谢您的帮助。
在 Map 模式中,键是与映射键匹配的值,值是将该键的值绑定到的模式。例如,模式%{"foo" => x}将成功与地图%{"foo" => 123}匹配,并且作为匹配的结果,变量x将绑定到123。
同样,在您的示例中,league_params将绑定到params地图"league"键的值,这league_params就是传递给变更集的原因。代码几乎等同于在函数体中做def create(conn, params)然后league_params = params["league"]。(几乎是因为如果该值不存在,则模式匹配将失败,但此代码将设置league_params为nil。)
| 归档时间: |
|
| 查看次数: |
1030 次 |
| 最近记录: |