I just want to add that when you don’t want the default urls generated by the resources/4 macro, you could always use directly get/4 and post/4 like below:
# Registration
scope "/registration", DemoWeb do
pipe_through :browser
get "/", RegistrationController, :new
post "/", RegistrationController, :create
end
This way the url won’t change between empty new form and create_error form. In my case I just do that for SEO purpose (for example I don’t want the url in English). And if someone shared the url, clicking on it will always result on the GET new form.
If you still want to redirect on invalid submit, you could assign the invalid changeset to the conn passed to redirect/2. Then you could have two clauses for your new action, one for empty form and the other for invalid form:
# invalid form
def new(%{error_changeset: changeset} = conn, _params) do
render(conn, "new.html", changeset: changeset)
end
# empty form
def new(conn, _params) do
changeset = Context.change_resource()
render(conn, "new.html", changeset: changeset)
end






















