2016-12-19 27 views
0

我在控制器中有以下代碼。顯然它尖叫重構。但我不知道如何解決它。如何重構它,以便所有重複的代碼部分都消失?在控制器中重構一個case結構

case Repo.insert(changeset) do 
    {:ok, social_media_account} -> 
    case social_media_account.provider do 
     "Twitter" -> 
     conn 
     |> put_flash(:info, gettext("A")) 
     |> redirect(to: user_social_media_account_path(conn, :index, conn.assigns[:user])) 
     "GitHub" -> 
     conn 
     |> put_flash(:info, gettext("B")) 
     |> redirect(to: user_social_media_account_path(conn, :index, conn.assigns[:user])) 
     _ -> 
     conn 
     |> put_flash(:info, gettext("C")) 
     |> redirect(to: user_social_media_account_path(conn, :index, conn.assigns[:user])) 
    end 
    {:error, changeset} -> 
    render(conn, "new.html", changeset: changeset) 
end 

回答

4

您可以返回從case值,並且使用:

case Repo.insert(changeset) do 
    {:ok, social_media_account} -> 
    info = case social_media_account.provider do 
     "Twitter" -> 
     gettext("A") 
     "GitHub" -> 
     gettext("B") 
     _ -> 
     gettext("C") 
    end 
    conn 
    |> put_flash(:info, info) 
    |> redirect(to: user_social_media_account_path(conn, :index, conn.assigns[:user])) 
    {:error, changeset} -> 
    render(conn, "new.html", changeset: changeset) 
end