2017-06-02 65 views
0

所以我知道在case语句中分配一个变量是不对的,但我无法弄清楚如何重构这个以便用户重定向并且conn被正确指定:修复case语句中的不安全变量赋值

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 

有什么建议吗?

回答

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 
+0

顺便说一句,第一个也不错。 – mudasobwa

+0

取决于是否在案件后使用了conn,因为它在第一个案件组中有条件地反弹。 –

+0

没关系,它是用put_session反弹的,返回的值仍然是重定向的。 – mudasobwa