优点宝石可以重新计算声誉并重新评估徽章和排名吗?

时间:2013-04-03 16:58:40

标签: ruby-on-rails-3 rubygems badge merit-gem

我想在我的rails应用程序中添加一个积分,等级和徽章系统。

merit宝石看起来很酷,但我想在使用之前确定它是如何工作的。

定义徽章的方式

# app/models/merit/badge_rules.rb
grant_on 'comments#vote', :badge => 'relevant-commenter', :to => :user do |comment|
  comment.votes.count == 5
end

和点

# app/models/merit/point_rules.rb
score 10, :to => :post_creator, :on => 'comments#create' do |comment|
  comment.title.present?
end

建议在这些情况下,在操作(comments#votecomments#create)之后,操作将作为挂钩完成。我不知道徽章和积分的计算/归属是如何工作的,所以我不确定。

随着我的应用程序随着时间的推移而发展,我希望能够更改点和徽章规则并重新评估它们。例如:假设我首先决定在帐户激活时授予10个积分。我希望能够将其更改为20,然后重新评估所有激活的配置文件并获得+10点增加。徽章也一样。

这个宝石支持吗?

1 个答案:

答案 0 :(得分:9)

可以在具有优点宝石的应用中重新计算声誉。 Merit保留触发哪些操作的历史记录在Merit::Action模型中授予哪个点/徽章,该模型映射到merit_actions表。

以下脚本应该可以工作(首先备份,因为我还没有在生产中执行此操作):

# 1. Reset all badges/points granting
Merit::BadgesSash.delete_all
Merit::Score::Point.delete_all

# 1.1 Optionally reset activity log (badges/points granted/removed until now)
Merit::ActivityLog.delete_all

# 2. Mark all `merit_actions` as unprocessed
Merit::Action.all.map{|a| a.update_attribute :processed, false }

# 3. Recompute reputation rules
Merit::Action.check_unprocessed
Merit::RankRules.new.check_rank_rules

Notes on merit internals ("General merit workflow" wiki page)