質問: ### 前提・実現したいこと railsのモデル関連付けで孫に位置するモデル一覧を簡潔に取得する ### 具体的な状況 モデルとして下記を考えたとき、メディア運営者オブジェクトから、関連する広告出稿依頼一覧を取得する良い方法はありますでしょうか? 併せて、どう関連付けを設定すれば良いかもお答えいただけますと幸いです。 ※現状考えている関連付けも合わせて記載しております * メディア運営会社 - has_many メディア * メディア - belongs_to メディア運営会社 - has_many 広告出稿依頼 - has_many 広告出稿者 through 広告出稿依頼 * 広告出稿依頼 - belongs_to メディア - belongs_to 広告出稿者 * 広告出稿者 - has_many 広告出稿依頼 - has_many メディア through 広告出稿依頼 よろしくお願い致します。
回答: モデル設計は一面的な判断は出来ないので、 例だけだと何ともアドバイスできませんが、 例示された設計ならば、以下のようなArelで取得可能です。 ``` # Media メディア # MediaOperator メディア運営会社 # AdRequest 広告出稿依頼 # AdRequester 広告出稿者 media_table = Media.are_table media_op_table = MediaOperator.arel_table ad_req_table = AdRequest.arel_table j_source = ad_req_table.join(media_table, Arel::Nodes::OuterJoin) .on(ad_req_table[:media_id].eq(media_table[:id]) .join(media_op_table, Arel::Nodes::OuterJoin) .on(media_table[:media_operator_id].eq(media_op_table[:id])).join_source AdRequest.joins(j_source).where(media_op_table[:id].eq(media_operator_id)) ``` モデルの関連が複雑でも、設計に矛盾がなければ、取得する方法はあるはずなので、 取得方法云々を設計の段階で考えるのではなく、 矛盾なく美しくすることを心がけて設計する方が良いかと。 (Railsを使う時点で、速度問題や容量などをカリカリに詰める必要もないと思うので)