7

私のアプリケーションでは、ログイン時に画面のようなダッシュボードを提供して、何が起こっているかの概要を把握したいと考えています。データを収集して順番に並べ替える必要があるモデルが約 4 つあります。私の問題はアクションを知ることので、モデルごとに特定のフィールドを取得できます。

どうやってそれを行うかについていくつかのアイデアがありますが、私はそれらが最善ではなく、せいぜい不完全であると感じています.

  1. モデル、関連する_id、アクションを含む別のモデルがあります。「投稿、1、作成」がその例です。

  2. 4 つの異なる配列を用意し、 say によって正しい順序でそれらをマージしますcreated_at

これについて最善の方法は何ですか?以下に例を示します。

代替テキスト

4

2 に答える 2

8

rails用のtimeline_fuプラグインをチェックしてみてください:

https://github.com/jamesgolick/timeline_fu

于 2009-10-27T17:08:31.753 に答える
3

最初のアイデアで提案したように、別のモデルを使用してフィード エントリを保存します。あなたが見ているデザインパターンは、ポリモーフィックアソシエーションパターンと呼ばれています

この新しいモデルが Feed と呼ばれ、列を使用するポリモーフィックな関連付けパターンに従っていると仮定しましょう: feedable_type および feedable_id (提案された列名 model および associated_id と同様)

あなたの問題は、ポリモーフィックな関連付けの単純な理解よりも大きいことを認めなければなりません。フィードは、現代の情報設計の主要な革新であり、次のような多くの複雑な機能を伴います。

  • プライバシー
  • フォロー/購読
  • フィルタリング
  • マージ

これらの属性のいずれかによっては、これらすべてが非常に複雑になる可能性があります。また、スケーリングやパフォーマンスなどの機能以外の要件を満たす必要がある場合、頭痛の種はすぐに悪化します。

Facebook アプリケーションを構築したことがある場合、フィード公開 API がどのように機能するかを理解することは非常に啓発的です。

フィードを保存するために使用される別のモデルは、フィード エントリの HTML をレンダリングする機能がまったく備わっていませんが、HTML をレンダリングする機能を十分に備えた元のモデルをロードすると、データベースに負荷がかかることにすぐに気付くでしょう。この問題を解決するために、元のモデルにフィードの HTML をレンダリングさせ、これをフィード テーブルに保存します。

もちろん、実装はこれよりも少し複雑です。Facebook と同様に、すべてのフィードには 1 つの共通点があります (それらは人からのものです)。したがって、各フィード エントリには user_id (いわば) があります。すべてのフィードにこのデータがあり、ニュース フィードの「誰がそれを行ったか」の部分をレンダリングできることがわかっているため、その部分は事前にレンダリングしません。

後でフィード モデルから再構築するのが難しい部分をできるだけ事前にレンダリングすることは非常に役立ちますが、コンポーネントがどこにでもあり、フィード モデルに組み込まれていることが確実な場合は、事前レンダリングを遅らせます。

最後に、オープンソース プロジェクトを学ぶことは、学ぶための良い方法です

于 2009-10-25T16:31:32.423 に答える