オプションの関連付けがあるシナリオがあります。関連付けが存在する場合もあれば、存在しない場合もあります。
画面にデータを表示しようとすると問題が発生します (単純なインデックス アクションを考えてください)。
次のアプリケーション設定を検討してください。
- プロジェクトには多くの成果物があります
- プロジェクトには多くの展開レコードがあります (このモデルの 2 つの属性は「名前」と「説明」です)
成果物インデックス アクション内から展開レコードの関連付けを取得することに関心があります。
次のコードで動作するようになりましたが、やや醜いと思います。
@array = deliverable.try(:project).try(:deployment_record)
if @array
@array.each do |r|
[r.name, r.description].join(' - ')
end
これを書き直すよりエレガントな方法は何でしょうか? 私は試した
deliverable.try(:project).try(:deployment_record).each do |r|
[r.name, r.description].join(' - ')
end
しかし、nil:NilClassエラーの未定義のメソッド「each」に遭遇し続けます。Nil オブジェクトで呼び出される .each をうまく回避する方法が見つからないようです。どうにかしてこれをもっと優雅にできるはずだと感じていますが、指を置くことはできません。
私はこれをコードベースで何度も再利用するので、コピーしてどこにでも貼り付けると、余分な 2 行が本当に私を殺します。関連付けの取得が失敗してよかったです。エラーやメッセージなしで正常に失敗したいだけです。何か案は?