Je suis nouveau à Elixir. En utilisant actuellement un cadre Pheonix. Je dois convertir des structs à la liste afin que je puisse les utiliser dans le champ Sélectionner.
dans mon tandis dans user_controller.ex code> Je tente de convertir une structure en liste, mais la variable
user_types_name code> est toujours vide. p>
form.html.eex code>. Pour plus d'informations P>
<%= inputs_for f, :user_type, fn cf -> %>
<%= label cf, :user_type %>
<%= select cf, :user_type, @user_type_names %>
<%= error_tag cf, :user_type %>
<% end %>
3 Réponses :
Toutes les données d'Elixir sont immuables. Vous devez utiliser quelque chose comme ceci: P> ++ code> est un opérateur de concaténation, pas un moyen de muter une liste en appuyant sur un élément sur celui-ci.
user_type_names = Accounts.list_user_types()
|> Enum.map(&(&1.name))
J'ai utilisé votre première suggestion et cela a fonctionné, merci. Mais je suis un peu perdu lorsque vous avez utilisé Enum.map (& (& 1.Name)) CODE>, pouvez-vous me le préciser?
@ Njy404 Voir ici: Que signifie "& 1" dans la fonction Elixir? A >
Vous devriez peut-être regarder enum.map Enum.map renvoie une liste par elle-même, vous pouvez donc vouloir faire quelque chose comme p> Et cela devrait renvoyer une liste. P> La documentation est assez bien écrite: https : //hexdocs.pm/elixir/enum.html p> Elixir vous oblige à penser à quel module (ENUM) et à quelle fonction
in Elixir, Donc, dans votre exemple, vous construisez une liste dans laquelle chacun élément est la concaténation de Qu'est-ce qui a été suggéré de l'attribution ne fonctionnera pas vraiment à l'intérieur du La solution est en fait plus simple que ce que vous faites. Il suffit de faire: p> pour code> est une construction pour les compréhensions. Ce qui signifie que le résultat sera une liste construite avec le résultat de la clause
do code> pour chaque élément dans les énumérables que vous utilisez.
user_type_names code> (quelle heure est la liste vide que vous avez attribuée) avec le nom actuel
utilisateur.name code>. p>
pour code> 's
do code> Clause, en raison des règles de décorage. Vous allez la réaffecter, mais le résultat sera réellement le même, car il sera toujours le résultat de la correspondance (
= code>). P>