我想打印数组/散列键的值,而不会在找不到索引时引发异常。 (注意我不是在这里寻求救援)
<%= content.categories[0].name %>
在上面的语句中,如果categories是一个空数组,它将抛出异常。由于我在我的视图中使用此代码,因此我想要一个非常简短的代码,如果类别为空,则不会打印任何内容。
答案 0 :(得分:8)
问题不是你正在访问一个空数组,这很好。访问未定义的数组索引将计算为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] %>
答案 1 :(得分:0)
content.categories.tap{|a| break a[0].name unless a.empty?}