首页 > 解决方案 > 如果 ERB 中的条件为真,如何不显示 HTML 和 CSS

问题描述

我在视图中为我的登录页面设置了登录提醒:

<% if alert %>
<div class="row">
      <div class="card-panel blue lighten-4"><%= alert['message'] %></div>
  </div>
<% end %>

即使警报消息为空,卡片面板仍会呈现,其中没有文本。

如果没有消息,我该怎么做才能使卡片面板根本不呈现。

标签: ruby-on-railsruby

解决方案


这个:

if alert

只检查是否是oralert以外的任何东西。因此,如果是 Hash,那么测试将始终通过,您将得到一张空卡。falsenilalert

如果alert总是会是一个哈希,那么你可以说:

if alert['message'].present?

这将处理消息为空字符串、非空字符串、仅包含空格、哈希'message'中不存在的键alert等。

如果alert可以,nil那么您可以说以下之一:

if alert && alert['message'].present?

if alert.to_h['message'].present?

if alert&.fetch('message', nil)

alert.to_h给你alertif alertis a Hash 但给你一个空 Hash if alertis nilalert&.fetch('message', nil)使用安全导航运算符 ( &.) 隐藏nil检查并使用Hash#fetch而不是通常的括号来查找密钥。


推荐阅读