Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 实现Stackoverflow风格声誉的最佳方法_Ruby On Rails_Database Design - Fatal编程技术网

Ruby on rails 实现Stackoverflow风格声誉的最佳方法

Ruby on rails 实现Stackoverflow风格声誉的最佳方法,ruby-on-rails,database-design,Ruby On Rails,Database Design,我正在我的说唱歌词解释网站上实施类似Stackoverflow的声誉系统: 很好的解释:+10 错误的解释:-1 对一首歌有最多的解释:+30 我的问题是如何实现这一点。具体地说,我正试图决定是否应该创建一个声誉事件表来帮助声誉重新计算,还是应该在需要时从头开始重新计算 声誉事件表将包含以下列: 名称(例如,“好的解释”、“坏的解释”) 颁发给(身份证) 由\u id授予\u 授予 每当发生影响声誉的事情时,我都会在声誉\u事件中插入相应的行。这使得重新计算声誉和生成生成生成给定人员声誉

我正在我的说唱歌词解释网站上实施类似Stackoverflow的声誉系统:

  • 很好的解释:+10
  • 错误的解释:-1
  • 对一首歌有最多的解释:+30
我的问题是如何实现这一点。具体地说,我正试图决定是否应该创建一个
声誉事件表来帮助声誉重新计算,还是应该在需要时从头开始重新计算

声誉事件表将包含以下列:

  • 名称(例如,“好的解释”、“坏的解释”)
  • 颁发给(身份证)
  • 由\u id授予\u
  • 授予
每当发生影响声誉的事情时,我都会在
声誉\u事件中插入相应的行。这使得重新计算声誉和生成生成生成给定人员声誉的人类可读的事件序列变得容易


另一方面,任何给定的操作都可能影响多个用户的声誉。例如,假设用户A在给定歌曲上超过用户B;基于“对一首歌拥有最多解释”的目标,我必须记住删除B的原始“拥有最多解释”事件(或者我可能会为B添加一个新事件?

我会制作一个声誉事件列表,以便重新计算,并能够跟踪为什么总代表值是这样的

但是为什么要有一个“name”列,为什么不只是一个带有正整数或负整数的值呢


这个表会变得很大,请确保缓存。

一般来说,我从不希望数据存在于多个位置。听起来您的“声誉事件”表将包含可以从其他数据计算的数据。如果是这样,我会从头开始重新计算,除非性能影响成为一个真正的问题

当您存储了计算数据时,您可能会发现它可能与基础数据不正确对应——基本上是一种损坏状态。如果可以避免,为什么还要让它成为可能呢?

我发现这段视频很棒:可能是重复的