如何在调用数组/哈希键之前检查它是否存在



当找不到索引时,我想打印数组/哈希键的值而不引发异常。(注意,我不是在这里寻找救援)

<%= content.categories[0].name %>

在上面的语句中,如果categories是一个空数组,它将抛出一个异常。由于我在视图中使用了这段代码,所以我想要一段非常简短的代码,但如果类别为空,则不打印任何内容。

问题不在于您正在访问一个空数组,这很好。访问数组的未定义索引将计算为nil。问题是您正试图调用该nil上的一个方法,该方法会引发一个NoMethodError

使用try,它专门用于解决您遇到的问题,即在调用方法之前,您会懒散地避免检查nil

<%= content.categories[0].try(:name) %>

您甚至可以再次链接try,但应避免过度使用try

<%= content.categories[0].try(:name).try(:length) %>

或者,您可以使用传统的流量控制语句:

<%= content.categories[0].name if content.categories[0] %>
content.categories.tap{|a| break a[0].name unless a.empty?}

相关内容

最新更新