在Rails应用程序中,我想将多个模型组合到一个活动源中。
例如,我有帖子,评论,照片,状态模型。每个人都属于一个用户,一个机构和一个城市。在用户/机构/城市展示页面上,我想显示最新活动的时间顺序列表。
从阅读和其他关于SO的问题来看,似乎有两种思想流派。
has_many :posts as: feedable
。然后在相应的节目页面上呈现ActivityFeed集合。@user_feed = @user_photos + @user_comment +..
但我没有看到太多讨论每种方法的利弊。
有没有其他人尝试类似的东西?在选择方法时,我应该考虑或计划哪些问题?每个表现的表现如何(特别是随着数据库变大)?
我的要求是:
感谢任何想法,个人经历或有关此进一步信息的指示。我应该寻找第三种选择吗?我对从多个查询创建组合数组的性能特别感兴趣。
谢谢
答案 0 :(得分:3)
让我再根据您的要求添加一些问题
对于我5和6和7 defo提示它支持第一个选项,我的代码将是:
class Activity
belongs_to :activity, polymorphic: true
belongs_to :user, counter_cache: true
belongs_to :institution, counter_cache: true
belongs_to :city, counter_cache: true
end
您的城市新闻馈送范围(演示1,2,6)
city.activities.order('updated_at DESC').limit(20)
请注意,这只是一张桌子上的便宜搜索,只能提供足够的快速列表,因为无需显示类似的关联加载(.includes(:activities)
)。
Joe from NYU, New York has posted a comment
Mel from UCL, London has added a new photo
如果活动是一个单独的类,那么4是微不足道的,而标准活动控制器也是如此。对于共享渲染部分,如快速列表视图/活动将是一个自然的地方。 使用counter_cache可以轻松完成7。 作为奖励,通过允许每种类型的has_many:活动,您可以区分活动类型,如创建,更新,阅读等。
希望这会有所帮助