最初のアイデアで提案したように、別のモデルを使用してフィード エントリを保存します。あなたが見ているデザインパターンは、ポリモーフィックアソシエーションパターンと呼ばれています
この新しいモデルが Feed と呼ばれ、列を使用するポリモーフィックな関連付けパターンに従っていると仮定しましょう: feedable_type および feedable_id (提案された列名 model および associated_id と同様)
あなたの問題は、ポリモーフィックな関連付けの単純な理解よりも大きいことを認めなければなりません。フィードは、現代の情報設計の主要な革新であり、次のような多くの複雑な機能を伴います。
- プライバシー
- フォロー/購読
- フィルタリング
- マージ
これらの属性のいずれかによっては、これらすべてが非常に複雑になる可能性があります。また、スケーリングやパフォーマンスなどの機能以外の要件を満たす必要がある場合、頭痛の種はすぐに悪化します。
Facebook アプリケーションを構築したことがある場合、フィード公開 API がどのように機能するかを理解することは非常に啓発的です。
フィードを保存するために使用される別のモデルは、フィード エントリの HTML をレンダリングする機能がまったく備わっていませんが、HTML をレンダリングする機能を十分に備えた元のモデルをロードすると、データベースに負荷がかかることにすぐに気付くでしょう。この問題を解決するために、元のモデルにフィードの HTML をレンダリングさせ、これをフィード テーブルに保存します。
もちろん、実装はこれよりも少し複雑です。Facebook と同様に、すべてのフィードには 1 つの共通点があります (それらは人からのものです)。したがって、各フィード エントリには user_id (いわば) があります。すべてのフィードにこのデータがあり、ニュース フィードの「誰がそれを行ったか」の部分をレンダリングできることがわかっているため、その部分は事前にレンダリングしません。
後でフィード モデルから再構築するのが難しい部分をできるだけ事前にレンダリングすることは非常に役立ちますが、コンポーネントがどこにでもあり、フィード モデルに組み込まれていることが確実な場合は、事前レンダリングを遅らせます。
最後に、オープンソース プロジェクトを学ぶことは、学ぶための良い方法です