深くネストされた関連を持つレガシーレールアプリケーションを開発しています。深くネストされた属性のいくつかをバブリングして表示する必要があります。私は(ActiveRecordのアソシエーションとアレイを使用して)結果を表示するには、このような何かをやっている時点では深くネストされたオブジェクトモデルのnilsを扱うためのテクニック
model_a
.collection_of_model_b
.map(&:collection_model_c)
.flatten
.map(&:collection_model_d)
.display_field
このアプローチでは、テストデータで働いていたが、私は、実際のデータを使用して開始したら、私はすべての上NilClassエラーを気づき始めました場所。
このデータを取得するために使用できる手法、構文、パターンについてガイダンスを提供してください。
私が考えているがまだ追求していないアプローチ: 1)レベルを下がるたびにnilsのチェックを行う別々の行でコールを分割します。 2)ストレートSQL(find_by_sql)を使用してください。
'.reject'はnil値をフィルタリングする可能性がありますか? – Mchl
どのステップが無限オブジェクトを導入していますか? – tokland
ステップは、私が選んだmodel_aに基づいて変化します。場合によっては、Arrayでnilになるmodel_bオブジェクトであり、それ以外の場合はmodel_cまたはmodel_dです。以下で述べるように、私はnilsに対して保護するために、あらゆる場合にmapを呼び出す前にコンパクトに実行しようとします。 – RidingRails