如何使用 EEx phoenix 模板检查嵌套值中的 nil

How to check nil in nested value with EEx phoenix template

我有以下代码。 我想向大家展示点。 所有成员至少有 point1。 一些成员有 point2 或 point3。这意味着某些成员的point2或3为零。

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

下面是我的图片

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

我想避免在 html.eex 模板中出现 nil 错误。 当我使用ruby时,它有nil检查功能。

一般如何避免?

应该清楚地区分 <%<%= 模板标签。

前者评估代码,后者评估代码,打印结果EEx 不喜欢 <%= nil %> 语句和 unless/1 returns 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 %>

二进制 'or' 运算符 (||) 将 nil 视为虚假值(以及 false),因此您可以使用它来转换 nil(和false)为特定值并保持其他值不变:

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

这会将 nilfalse 转换为空字符串,同时如果值是其他值则保留原样。