-1

インデックスが見つからない場合に、例外を発生させずに配列/ハッシュ キーの値を出力したい。(ここで救助を探しているわけではないことに注意してください)

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

上記のステートメントでは、categories が空の配列の場合、例外がスローされます。ビューでこのコードを使用しているので、非常に簡潔でありながら、カテゴリが空の場合は何も出力しないコードが必要です。

4

2 に答える 2

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] %>
于 2013-08-22T18:48:02.820 に答える
0
content.categories.tap{|a| break a[0].name unless a.empty?}
于 2013-08-22T19:10:30.760 に答える