2017-06-02 68 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