ruby-on-rails - 如果 ERB 中的条件为真,如何不显示 HTML 和 CSS
问题描述
我在视图中为我的登录页面设置了登录提醒:
<% if alert %>
<div class="row">
<div class="card-panel blue lighten-4"><%= alert['message'] %></div>
</div>
<% end %>
即使警报消息为空,卡片面板仍会呈现,其中没有文本。
如果没有消息,我该怎么做才能使卡片面板根本不呈现。
解决方案
这个:
if alert
只检查是否是oralert
以外的任何东西。因此,如果是 Hash,那么测试将始终通过,您将得到一张空卡。false
nil
alert
如果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
给你alert
if alert
is a Hash 但给你一个空 Hash if alert
is nil
。alert&.fetch('message', nil)
使用安全导航运算符 ( &.
) 隐藏nil
检查并使用Hash#fetch
而不是通常的括号来查找密钥。