如何在调用之前检查数组/散列键是否存在?

时间:2013-08-22 18:45:56

标签: ruby-on-rails ruby

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

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

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

2 个答案:

答案 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?}