2016-12-19 4 views
0

У меня есть следующий код в контроллере. Очевидно, он кричит на рефакторинг. Но я не знаю, как это решить. Как можно реорганизовать его так, чтобы все дублированные части кода исчезли?Рефакторинг структуры корпуса в контроллере

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