0
votes

Convertir la structure à la liste dans Elixir

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 user_controller.ex code> Je tente de convertir une structure en liste, mais la variable user_types_name code> est toujours vide. p> xxx pré>

tandis dans 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 %>


0 commentaires

3 Réponses :


2
votes

Toutes les données d'Elixir sont immuables. ++ code> est un opérateur de concaténation, pas un moyen de muter une liste en appuyant sur un élément sur celui-ci.

Vous devez utiliser quelque chose comme ceci: P>

user_type_names = Accounts.list_user_types()
  |> Enum.map(&(&1.name))


2 commentaires

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)) , pouvez-vous me le préciser?


@ Njy404 Voir ici: Que signifie "& 1" dans la fonction Elixir?



1
votes

Vous devriez peut-être regarder enum.map xxx

Enum.map renvoie une liste par elle-même, vous pouvez donc vouloir faire quelque chose comme xxx

Et cela devrait renvoyer une liste.

La documentation est assez bien écrite: https : //hexdocs.pm/elixir/enum.html

Elixir vous oblige à penser à quel module (ENUM) et à quelle fonction (carte) que vous allez utiliser. Pensez que le fonctionnement est la clé pour faire fonctionner les choses


0 commentaires

1
votes

in Elixir, pour 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 pour chaque élément dans les énumérables que vous utilisez.

Donc, dans votre exemple, vous construisez une liste dans laquelle chacun élément est la concaténation de user_type_names (quelle heure est la liste vide que vous avez attribuée) avec le nom actuel utilisateur.name .

Qu'est-ce qui a été suggéré de l'attribution ne fonctionnera pas vraiment à l'intérieur du pour 's do 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 ( = ).

La solution est en fait plus simple que ce que vous faites. Il suffit de faire: xxx


0 commentaires