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

Ben*_*ier 4 rubygems badge ruby-on-rails-3 merit-gem

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

优点宝石看起来很酷,但我想,以确保它在使用之前是如何工作的.

你定义徽章的方式

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

和点

# app/models/merit/point_rules.rb
score 10, :to => :post_creator, :on => 'comments#create' do |comment|
  comment.title.present?
end
Run Code Online (Sandbox Code Playgroud)

表明该操作是作为一个钩子完成的,就在这些情况下的动作(comments#votecomments#create)之后.我不知道徽章和积分的计算/归属是如何工作的,所以我不确定.

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

这个宝石支持吗?

Tut*_*teC 9

可以在具有优点gem的应用程序中重新计算声誉.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
Run Code Online (Sandbox Code Playgroud)

关于绩效内部的说明("一般绩效工作流程"维基页面).