列表应用中的模型规划,需要合并记录并提供列表项统计信息

时间:2013-09-15 11:32:30

标签: ruby-on-rails ruby-on-rails-3.2 merge hierarchy rails-models

我仍然对Rails缺乏经验,并且希望能够在我想要构建的应用程序中规划模型和关联。这是非常基本的,但是我有一些功能,我很难搞清楚。它基本上是MyAnimeList的缩小版。

这是交易:

我目前有用户模型和动漫模型。 动漫包含动画节目列表。我还有一个列表模型,它有一个用户,可能会有很多动漫,这取决于你们的建议。

第一个功能看起来相当简单,但是我又踩了两个我想要包含的功能:

  1. 我希望用户能够通过点击“添加到我的列表”按钮进入主动漫列表并将动漫添加到自己的列表
  2. 用户可以为自己的动漫评分,并更改已完成的剧集数/节目数。对此的统计数据应反映在主列表上,例如,如果有人看完剑艺术在线(SAO)动漫,然后对其进行评分并将其标记为已完成,则会更新主要动漫的SAO列表列表,显示“2987人已完成此动漫”等统计数据,并且“该节目的平均用户评分为4.2分(满分5分)”。也许是Stat模型?我怎么能实现这个呢?
  3. 有时,节目可能会在数据库中意外重复,或者有多个日语翻译。 我需要能够合并节目(以及所有相关的统计/用户等)。
  4. 所以我只是不确定要包含哪些模型(是必要的Stat模型?),或者需要嵌套的地方(即嵌套资源),如果有的话。

    我看过许多不同的指南/教程/类似的问题等,但没有运气,我学到了什么,并将它应用于(对我来说)复杂的场景。

    对此有任何帮助或讨论将不胜感激!如果您需要任何进一步的细节,请告诉我。

2 个答案:

答案 0 :(得分:0)

首先,永远不要打电话给你的模特'秀'。它令人困惑,含糊不清,根本无法弄清楚课程的内容。如果你告诉我你有一个Show模型,我怎么知道你指的是什么?命名非常重要,所以值得投入时间。

无论如何,我会从绘制基本设置开始。这肯定有助于使您的设置可视化。

您的解释有点令人困惑,但您可以想到当前的设置:

  1. 用户 has_one 列表,因此 WatchList 属于用户
  2. 观看列表 has_many 动漫,因此动漫属于观看列表
  3. 动漫 has_many review_scores ,因此 ReviewScore belongs_to 动漫
  4. 这只是一个例子,只是很快就想到了。希望它能让您基本了解如何考虑主要构建块。

    更新:MrMorphe是对的,List也是模型的坏名称。几乎和Show一样。说实话,分数也很糟糕,你应该仔细考虑所有的名字。

答案 1 :(得分:0)

我的想法: 尽量不要考虑列表。 List是一种通用数据类型,而是尝试用你正在建模的概念的更抽象的术语来思考(例如WatchedShows)。这些“抽象概念”经常成为你的模特。

正如彼得所说,动漫比秀更好。可能有更多你想要动画系列的模型,例如剧集,季节等?现在考虑这个问题会在你看到合并事物时为你节省一些问题......

现在我自己是Rails的新手并且在我的数据建模上生气,所以如果我对以下内容有误,请有人跳我:

用户和动漫之间有关系。这种关系是一个模型(WatchedAnime?),其中一个用户观看了(?)许多动画,并且很多用户都观看了动画片(?)。要对此进行建模,您可能需要查看http://guides.rubyonrails.org/association_basics.html处的has_many:through关联。用户分配的分数将成为这种关系的一个要素。

然后,您可以通过一个简单的声明来制作动漫乐谱,例如:

average_score = WatchedAnime.where("anime_id = 100").avg('score')

编辑:您还需要忽略用户未分配分数的实例,否则会抛弃平均值。

如上所述,我是Rails的新手,并且has_many:through关系的问题在于你必须验证用户与给定动画没有现有关系,因此我想知道rails是否有更自然的建模/改进这种关联的方式......