我想在找不到索引时打印数组/哈希键的值而不引发异常。(注意我不是在这里寻找救援)
<%= content.categories[0].name %>
在上面的语句中,如果 categories 是一个空数组,就会抛出异常。由于我在视图中使用此代码,因此我想要一个非常简短的代码,但如果类别为空,则不会打印任何内容。
我想在找不到索引时打印数组/哈希键的值而不引发异常。(注意我不是在这里寻找救援)
<%= content.categories[0].name %>
在上面的语句中,如果 categories 是一个空数组,就会抛出异常。由于我在视图中使用此代码,因此我想要一个非常简短的代码,但如果类别为空,则不会打印任何内容。
问题不在于您正在访问一个空数组,这很好。访问数组的未定义索引将评估为nil
. 问题是您试图在 that 上调用一个方法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?}