I define a show.ex
liveview route where I fetch a comic. This comic might be deleted a few seconds ago. Using the browser back navigation brings me with a few clicks to a Ecto.NoResultsError
.
Currently I handle this in this manner, but somehow it feels not like the best approach.
Would a different approach be better / cleaner?
I am thinking of letting the NoResultsError
bubble up to a Supervisor which knows of the routing hierarchy and redirects to /comics
based on where the error was thrown. I am new to Elixir on this level so unsure if the Supervisor idea makes any sense.
Trying to learn best practices though…
def mount(%{"id" => id}, _session, socket) do
try do
comic = Catalog.get_comic!(id)
socket = assign(socket, :comic, comic)
{:ok, socket}
rescue
Ecto.NoResultsError ->
dbg("Comic not found")
{:ok,
socket
|> put_flash(:error, "Comic not found.")
|> redirect(to: ~p"/comics")}
end
end
The bang operation is autogenerated by Phoenix generators, which is why I don’t question that approach ATM.