ok,
the router:
scope "/", Userteam1Web do
# Use the default browser stack
pipe_through(:browser)
resources("/", SessionController, only: [:index, :create, :delete])
get("/index", PageController, :index)
resources("/teams", TeamController)
resources("/users", UserController)
resources("/roles", RoleController)
resources("/challenges", ChallengeController)
resources("/info", InfoController)
resources("/challengegroups", ChallengeGroupController)
end
and the controller edit/update:
def edit(conn, %{"id" => id}) do
challenge = Web.get_challenge!(id)
changeset = Web.change_challenge(challenge)
challenge_groups =
Repo.all(Userteam1.Web.ChallengeGroup)
|> Enum.map(&{&1.name, &1.id})
challenge_groups = [{"", ""} | challenge_groups]
render(conn, "edit.html",
challenge: challenge,
changeset: changeset,
challenge_groups: challenge_groups
)
end
def update(conn, %{"id" => id, "challenge" => challenge_params}) do
challenge = Web.get_challenge!(id)
changeset = Web.change_challenge(challenge)
challenge_groups =
Repo.all(Userteam1.Web.ChallengeGroup)
|> Enum.map(&{&1.name, &1.id})
challenge_groups = [{"", ""} | challenge_groups]
check_by_challenge_group =
if challenge_params["challenge_group_id"] != "" do
get_challenge_by_challenge_group(challenge_params["challenge_group_id"])
end
if challenge_params["main"] == "true" do
if length(check_by_challenge_group) > 0 do
conn
|> put_flash(:error, "There is a main Challenge for this Challenge Group already!")
|> render("edit.html",
challenge: challenge,
changeset: changeset,
challenge_groups: challenge_groups
)
else
case Web.update_challenge(challenge, challenge_params) do
{:ok, challenge} ->
conn
|> put_flash(:info, "Challenge updated successfully.")
|> redirect(to: challenge_path(conn, :show, challenge))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "edit.html",
challenge: challenge,
changeset: changeset,
challenge_groups: challenge_groups
)
end
end
else
if challenge_params["challenge_group_id"] == "" do
challenge_params = Map.put(challenge_params, "main", true)
case Web.update_challenge(challenge, challenge_params) do
{:ok, challenge} ->
conn
|> put_flash(:info, "Challenge updated successfully.")
|> redirect(to: challenge_path(conn, :show, challenge))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "edit.html",
challenge: challenge,
changeset: changeset,
challenge_groups: challenge_groups
)
end
else
case Web.update_challenge(challenge, challenge_params) do
{:ok, challenge} ->
conn
|> put_flash(:info, "Challenge updated successfully.")
|> redirect(to: challenge_path(conn, :show, challenge))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "edit.html",
challenge: challenge,
changeset: changeset,
challenge_groups: challenge_groups
)
end
end
end
end