Problem

Du hast eine Collection/Liste und möchtest diese in deinem Template durchnummerieren. In objektorientierten Sprachen wird oft ein interner Index geführt, auf den du zugreifen kannst. Du fragst dich, wie du dies in Elixir/Phoenix lösen kannst.

Lösung

Die Lösung ist sehr einfach, aber ungewohnt für Anfänger in funktionalen Sprachen. Ich wurde so oft danach gefragt, dass die Lösung ein eigenes Rezept wert war.

Wie du es vielleicht erwartest, haben wir für die Ausgabe keinen magischen, versteckten Index in unserem Template. Allerdings kannst du diesen sehr leicht selbst erzeugen. Wir nutzen dazu die Funktion Enum.with_index aus dem Modul Enumerable. Mit dieser wird jedem Element der entsprechende Index hinzugefügt - aus elem wird {elem, index}.

Wenn du mit deiner normalen Liste startest….

<%= for user <- @users do %>
  # ...
<% end %>

… sieht die Version mit Index so aus:

<%= for {user, index} <- Enum.with_index(@users) do %>
  <%= index %>
  ...
<% end %>