应用程序仪表板查看逻辑

时间:2009-10-25 03:26:58

标签: ruby-on-rails ruby dashboard

在我的应用程序中,我想在登录时提供类似屏幕的仪表板,以便了解正在发生的事情。我有大约4个模型需要从中收集数据并按顺序对它们进行排序。我的问题是知道 操作,因此我可以获得每个模型的特定字段。

以下是关于如何实现这一目标的一些想法,但我觉得它们不是最好的和不完整的。

  1. 我有一个单独的模型,其中包含:model,associated_id,action。 “Post,1,created”就是一个例子。

  2. 拥有4个不同的数组,并通过说created_at将它们与正确的顺序合并。

  3. 最好的方法是什么?我在下面提供了一个例子:

    alt text

2 个答案:

答案 0 :(得分:8)

您可能想查看rails的timeline_fu插件:

https://github.com/jamesgolick/timeline_fu

答案 1 :(得分:3)

使用单独的模型存储您在第一个想法中建议的Feed条目。您所看到的设计模式称为polymorphic association pattern

我们假设这个新模型被称为Feed,遵循多态关联模式,您将使用列:feedable_type和feedable_id(与建议的列名称模型和associated_id相对应)

我必须承认,您的问题比对多态关联的简单理解更大,Feed是现代信息设计的一项重大创新,需要许多复杂功能,包括:

  • 隐私
  • 关注/订阅
  • 过滤
  • 合并

根据这些属性中的任何一个,所有这些都会变得非常复杂。如果你必须满足一些非功能性要求,比如缩放和性能,那么头痛很快就会复杂化。

如果你曾经构建过一个Facebook应用程序,那么了解他们的feed发布API是如何工作的,这是非常有启发性的。

您很快就会注意到,用于存储Feed的单独模型完全没有装备来呈现Feed条目HTML,但是加载用于呈现HTML的原始模型是数据库非常昂贵的。为了解决这个问题,我让原始模型渲染了feed的HTML,并将其存储到feed表中。

当然,实施甚至比这更复杂。与Facebook一样,所有Feed都有1个共同点(它们来自人)。所以每个feed条目都有user_id(可以这么说)。由于我们知道所有Feed都有这些数据,并且可以呈现新闻Feed的“谁做了”部分,因此我们不预先渲染该部分。

尽可能多地预渲染以后很难从Feed模型重新构建,但是当我们确定组件无处不在并且隐藏在我们的Feed模型中时,会延迟预渲染。 / p>

最后,研究开源项目是一种很好的学习方式