次のモデル/関連付けのセットがあります。
これはオブジェクト指向の観点からは理にかなっていますが、たとえば、UI でそれを表す NewsItem と Photo.image。
明らかな改善は、ポリモーフィックを省いてMediaItem
作成Video
し、Photo
ポリモーフィックにすることですが、それらを交換可能に扱い、順序付け、ランク付けして検索する必要があり、ポリモーフィック関連付けにより、これが非常に複雑/扱いにくくなります。また、多くの重複した属性 (現在オンになっているものMediaItem
) も含まれます。
この設定に関する私の主な問題は、 aNewsItem
が視覚的に表現される状況があることです。そのタイトルとともに、そのカバー画像である画像を表示しNewsItem
ます。事実上、ギャラリーの最初の写真です。
この状況では、私は効果的にこれを行っています:
news_item.gallery.media_items.cover_photo.image.url(:thumbnail)
これらのアイテムが一度に最大 20 個 (おそらくそれ以上) 画面に表示されることを考えると、データベース クエリを最適化する必要がありますincludes
。
もちろん、委任の背後にあるアクセスの一部を非表示にするために、大規模な方法を使用できます。たとえば、次のようになります。
news_item.gallery_cover_image
しかし、これでも一連のテーブルを含めようとする厄介なクエリが残っています。
これを構造化するより賢明な方法はありますか?