修复 case 语句中不安全的变量赋值
fix unsafe variable assignment in case statement
所以我知道在 case 语句中分配变量是不对的,但我不知道如何重构它以便用户被重定向并且 conn 被正确分配:
case Repo.insert(changeset) do
{:ok,user} -> conn = put_session(conn, :user, user)
redirect conn, to: "/"
{:error, changeset} -> render(conn,"sign_up.html", changeset: changeset, referral: referral)
end
我不能把conn 移出,可以吗?我不确定是否正确分配它,因为现在我将它分配给整个重定向语句。
conn =
case Repo.insert(changeset) do
{:ok,user} -> redirect put_session(conn, :user, user), to: "/"
{:error, changeset} -> render(conn,"sign_up.html", changeset: changeset, referral: referral)
end
有什么建议吗?
redirect
和 render
都是 return conn
所以第二个版本没问题。
如果 case
是控制器函数中的最后一个表达式,那么您可能根本不需要重新分配 conn
。
conn =
case Repo.insert(changeset) do
{:ok,user} ->
conn
|> put_session(conn, :user, user)
|> redirect(to: "/")
{:error, changeset} ->
conn
|> render("sign_up.html", changeset: changeset, referral: referral)
end
所以我知道在 case 语句中分配变量是不对的,但我不知道如何重构它以便用户被重定向并且 conn 被正确分配:
case Repo.insert(changeset) do
{:ok,user} -> conn = put_session(conn, :user, user)
redirect conn, to: "/"
{:error, changeset} -> render(conn,"sign_up.html", changeset: changeset, referral: referral)
end
我不能把conn 移出,可以吗?我不确定是否正确分配它,因为现在我将它分配给整个重定向语句。
conn =
case Repo.insert(changeset) do
{:ok,user} -> redirect put_session(conn, :user, user), to: "/"
{:error, changeset} -> render(conn,"sign_up.html", changeset: changeset, referral: referral)
end
有什么建议吗?
redirect
和 render
都是 return conn
所以第二个版本没问题。
如果 case
是控制器函数中的最后一个表达式,那么您可能根本不需要重新分配 conn
。
conn =
case Repo.insert(changeset) do
{:ok,user} ->
conn
|> put_session(conn, :user, user)
|> redirect(to: "/")
{:error, changeset} ->
conn
|> render("sign_up.html", changeset: changeset, referral: referral)
end