在case语句中修复不安全的变量赋值

时间:2017-06-02 04:45:15

标签: elixir unsafe

所以我知道在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 =
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

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

redirectrender都返回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