【发布时间】:2013-01-18 12:47:31
【问题描述】:
在这个问题中,我有两个数据库表:
- 发布 (has_many :cmets)
- ActivityFeed (belongs_to item, :polymorphic)
- 评论(belongs_to :post)
假设在 facebook 的一个群组中发生了这些连续的动作:
- 用户 A 发布了状态“状态 1”
- 用户 B 发布了状态“状态 2”
然后这 2 个帖子中的每一个都触发了为组创建 FeedItem(活动)。
现在,当用户加载页面时,Feed 活动按 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
【问题讨论】:
标签: ruby-on-rails postgresql database-design social-networking feed