Rails:你如何暂时显示(数字)差异?

时间:2014-04-24 16:31:39

标签: ruby-on-rails ruby-on-rails-4

我正在尝试在我的应用中实现信誉系统(类似于stackoverflow)。我希望能够在旁边的声誉分数中显示任何最近的添加或减少。这种实施的最佳方式是什么?

对于例如声望得分:150 +10或声望得分:150 -20

我现在能想到的唯一方法是创建另一个名为temporary_reputation的列/字段,并在其中保留最新的加法/减法。然后可能每20-30分钟创建一个cron来清除该列。也许我可以用缓存做点什么?

1 个答案:

答案 0 :(得分:0)

我认为你的建议无法解决你的问题。

我更希望实现一个额外的模型,例如:ScoreChange,它将具有

  • 时间戳

以及所需的关系。

对于具有信誉评分的每个项目,您可以使用汇总的score字段,然后显示所需的所有更改。

例如:

class Item < ActiveRecord::Base

has_many :score_changes

def last_changes(n)
  score_changes.last_changes_sum(n)
end

def score_with_last_change(n = 3)
  [score, last_changes(n)]
end

class ScoreChange < ActiveRecord::Base
  belongs_to :item

  def self.last_changes_sum(n)
    order('timestamp desc').limit(n).pluck(:value).inject(&:+)
  end
end