我想在我的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#vote
或comments#create
)之后,操作将作为挂钩完成。我不知道徽章和积分的计算/归属是如何工作的,所以我不确定。
随着我的应用程序随着时间的推移而发展,我希望能够更改点和徽章规则并重新评估它们。例如:假设我首先决定在帐户激活时授予10个积分。我希望能够将其更改为20,然后重新评估所有激活的配置文件并获得+10点增加。徽章也一样。
这个宝石支持吗?
答案 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)