この質問では、データベース用に 2 つのテーブルがあります。
- 投稿 (has_many :comments)
- ActivityFeed (belongs_to item, :polymorphic)
- コメント (belongs_to :post)
Facebook のグループ内で次の一連のアクションが発生するとします。
- ユーザー A がステータス「ステータス 1」を投稿しました
- ユーザー B がステータス「ステータス 2」を投稿しました
そして、これら 2 つの投稿のそれぞれが、グループの FeedItem (アクティビティ) の作成をトリガーしました。
ユーザーがページをロードすると、フィード アクティビティは created_at/updated_at でソートされます。フィード アクティビティは、オブジェクトのポリモーフィック セットです (投稿、写真、投票、ファイルなど)。
すぐにユーザー A がユーザー B の投稿にコメントした場合、フィードの正しい順序は次のようになります。
- 「ステータス2」
- 「ステータス1」
では、ユーザー A が「ステータス 2」にコメントするとどうなるでしょうか? 関連する投稿 (コメントが追加されている場所) を見つけて、投稿が関連するアクティビティからタイムスタンプを更新する必要がありますか?
そのためのアドバイスが必要です。ありがとう!
アップデート
class Comment < ActiveRecord:Base
belongs_to :post, touch: true
end
class Post < ActiveRecord:Base
has_many :comments
act_as_activity -> on_create will create a Activity representing this object
end
class Activity < ActiveRecord:Base
belongs_to :item, :polymorphic => true
belongs_to :parent, :polymorphic => true
belongs_to :user
end
フィードには複数の種類のオブジェクトを含めることができるため、フィード クエリはアクティビティ テーブルを検索します。クエリは Activity テーブルで実行されるため、投稿にコメントを付けるときは、タイムスタンプをこのテーブルで更新する必要があります。
SELECT * FROM Activity
ORDER BY updated_at