Как проверить nil во вложенном значении с помощью шаблона EEx Phoenix - PullRequest
0 голосов
/ 05 апреля 2020

У меня следующий код. Я хотел бы показать участникам точку. У всех участников есть по крайней мере 1 балл. У некоторых участников есть point2 или point3. Это означает, что у некоторых членов есть point2 или 3. nil.

    <%= for member <- @members do %>
      <%= member.point1 %> <%= member.point2 %> <%= member.point3 %>
    <% end %>

Мое изображение следующее.

   <%= unless is_nil(member.point2) %>
     <%= member.point2 %>
   <% end %>

Я бы хотел избежать ошибки nil в шаблонах html .eex. Когда я использую ruby, он имеет функцию проверки на ноль.

Как вообще можно этого избежать?

Ответы [ 2 ]

2 голосов
/ 05 апреля 2020

Следует четко различать guish между <% и <%= шаблонными тегами.

Первый оценивает код, второй оценивает его, а выводит результат . EEx не любит <%= nil %> операторов, а unless/1 возвращает nil, если условие истинно и условие else не указано.

Тем не менее, ниже будет работать.

# ⇓⇓⇓ DO NOT PRINT IT OUT
<% unless is_nil(member.point2) %>
  <%= member.point2 %>
<% end %>

Кроме того, вы можете обмануть двигатель, преобразовав nil в приемлемую пустую строку.

<% for member <- @members, not is_nil(member) do %>
  <%= to_string(member.point1) %>
  <%= to_string(member.point2) %>
  <%= to_string(member.point3) %>
<% end %>
0 голосов
/ 05 апреля 2020

Двоичный оператор 'или' (||) обрабатывает nil как ложное значение (вместе с false), поэтому вы можете использовать его для преобразования nilfalse) в специфицированный c value и оставьте другие значения как есть:

<%= member.point1 %> <%= member.point2 || "" %> <%= member.point3 || "" %>

Это преобразует nil и false в пустую строку, оставляя значение как есть, если это что-то другое.

...