在这个问题中,我有两个数据库表:
- 发布(has_many :comments)
- ActivityFeed (belongs_to item, :polymorphic)
- 评论 (belongs_to :post)
假设在 facebook 的一个组内发生了以下顺序动作:
- 用户 A 发布了状态“状态 1”
- 用户 B 发布了状态“状态 2”
然后这两个帖子中的每一个都触发了该组的 FeedItem (Activity) 的创建。
现在,当用户加载页面时,提要活动按 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