【问题标题】:How to check nil in nested value with EEx phoenix template如何使用 EEx phoenix 模板检查嵌套值中的 nil
【发布时间】:2020-04-05 01:42:40
【问题描述】:

我有以下代码。 我想给各位看点。 所有成员至少有point1。 有些成员有point2或point3。这意味着一些成员有point2或3是nil。

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

我的图片在后面。

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

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

一般我该如何避免呢?

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    应该清楚地区分&lt;%&lt;%= 模板标签。

    前者评估代码,后者评估代码并打印结果EEx 不喜欢 &lt;%= nil %&gt; 语句,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 %>
    

    【讨论】:

      【解决方案2】:

      二元“或”运算符 (||) 将 nil 视为假值(与 false 一起),因此您可以使用它将 nil(和 false)转换为特定值并保持其他值不变:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多