You shouldn’t dynamically create atoms - that’s not what they’re for. If you anticipate NEEDING interpolation (e.g. you have 1000 computers), then each one should not be given its own atom key in the assigns, but rather stored with string (or integer) keys in a map, like:
def mount(_, _, socket) do
computer_ids = %{"computer0_id" => 123, "computer1_id" => 456, ...}
socket = assign(socket, computer_ids: computer_ids)
{:ok, socket}
end
Then you can access the ids from the template like:
for x <- 0..5 do
<%= @computer_ids["computer#{x}_id"] %>
end
But if you don’t have so many IDs, and you would like to keep each one as a separate atom key in the assigns, then you should create a helper function in your view which explicitly handles each case, for example:
def computer_id(x, socket) do
case x do
0 -> socket.assigns.computer0_id
1 -> socket.assigns.computer1_id
2 -> socket.assigns.computer2_id
3 -> socket.assigns.computer3_id
4 -> socket.assigns.computer4_id
5 -> socket.assigns.computer5_id
end
end
and then in the template
for x <- 0..5 do
<%= computer_id(x, @socket) %>
end


















