我在说唱歌词解释网站Rap Genius上实现了类似Stackoverflow的信誉系统:

  • 好的解释:+10
  • 错误的解释:-1
  • 对一首歌的解释最多:+30

  • 我的问题是如何实现这一目标。具体来说,我正在尝试决定是否应该创建reputation_events表来帮助重新计算信誉,或者是否只需要在需要时从头开始重新计算。
    reputation_events表将包含以下列:
  • 名称(例如“good_explanation”,“bad_explanation”)
  • award_to_id
  • 授予_by_id
  • 授予_at

  • 每当发生影响声誉的事件时,我都会在reputation_events中插入相应的行。这使得重新计算声誉并生成易于理解的事件序列(生成给定人员的声誉)变得容易。

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

    最佳答案

    总的来说,我从来不希望数据存在于多个地方。听起来您的“reputation_events”表将包含可以从其他数据计算出的数据。如果是这样,除非性能影响成为一个真正的问题,否则我将重新进行计算。

    存储计算出的数据后,就有可能与基本数据不正确对应-基本上是损坏的状态。如果可以避免,为什么还要使它成为可能?

    关于ruby-on-rails - 实现Stackoverflow风格声誉的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3293035/

    10-14 07:53