在我的应用程序中,我想在登录时提供类似屏幕的仪表板,以便了解正在发生的事情.我有大约4个模型,我需要从中收集数据并按顺序对它们进行排序.我的问题是知道动作,所以我可以获得每个模型的特定字段.
这里有一些关于如何去做的想法,但我觉得它们不是最好的和最不完整的.
>我有一个单独的模型,其中包含:model,associated_id,action. “Post,1,created”就是一个例子.
>有4个不同的数组,并通过say created_at将它们与正确的顺序合并.
最好的方法是什么?我在下面提供了一个例子:
解决方法
使用单独的模型来存储您在第一个想法中建议的Feed条目.您所看到的设计模式称为
polymorphic association pattern
让我们假设这个新模型被称为Feed,遵循多态关联模式,您将使用列:Feedable_type和Feedable_id(与建议的列名称模型和associated_id相对应)
我必须承认,你的问题比对多态关联的简单理解更大,提要是现代信息设计的一项重大创新,需要许多复杂的功能,包括:
>隐私
>关注/订阅
>过滤
>合并
根据这些属性中的任何一个,所有这些都会变得非常复杂.如果你必须满足一些非功能性的要求,如缩放和性能,头痛会迅速复杂化.
如果你曾经构建过一个Facebook应用程序,那么看看他们的Feed发布API是如何工作的,这是非常有启发性的.
您很快就会注意到用于存储Feed的单独模型完全没有装备来呈现供稿条目HTML,但是加载用于呈现HTML的原始模型的数据库是昂贵的.为了解决这个问题,我让原始模型渲染了Feed的HTML,并将其存储到Feed表中.
当然,实现甚至比这更复杂.与Facebook一样,所有Feed都有1个共同点(它们来自人).所以每个Feed条目都有user_id(可以这么说).由于我们知道所有Feed都有这些数据,并且可以呈现新闻源的“谁做了”部分,因此我们不预先渲染该部分.
尽可能多地预渲染以后很难从Feed模型重新构建,但是当我们确定组件无处不在并且隐藏在我们的Feed模型中时,会延迟预渲染.
最后,研究开源项目是一种很好的学习方式