インデックスが見つからない場合に、例外を発生させずに配列/ハッシュ キーの値を出力したい。(ここで救助を探しているわけではないことに注意してください)
<%= content.categories[0].name %>
上記のステートメントでは、categories が空の配列の場合、例外がスローされます。ビューでこのコードを使用しているので、非常に簡潔でありながら、カテゴリが空の場合は何も出力しないコードが必要です。
インデックスが見つからない場合に、例外を発生させずに配列/ハッシュ キーの値を出力したい。(ここで救助を探しているわけではないことに注意してください)
<%= 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?}