如何回计算'优点?

时间:2016-05-04 12:54:57

标签: ruby-on-rails merit-gem

我尝试使用Merit将声誉系统添加到现有应用中。

我想根据历史活动回溯计算所有用户的积分。 Merit有一个非常复杂的内部结构,有几个表,我想我可能会错过一些重要的步骤。以下是我到目前为止所做的事情,我很感激任何更熟悉这个宝石的人的指示。

为了简单起见,我们要说

score 2, to: :user, on: 'comments#create'

并且我有一个充满记录的评论表,看起来像这样

Comment id: 56, content: "My comment", user_id: 247, commentable_id: 2, commentable_type: 'Object', created_at: "2016-04-04 08:56:17", updated_at: "2016-04-04 17:03:55">

我目前的做法是这样的

Comment.all.each do |c|
  score_point = Merit::Score::Point.create( num_point: 2, log: nil, created_at: c.created_at)
  action = Merit::Action.create(user_id: c.user_id, action_method: 'create', action_value: nil, had_errors: false, target_model: c.class.name, target_id: c.id, processed: true, created_at: c.created_at)
  activity_log = Merit::ActivityLog.create( action_id: action.id, related_change_type: "Merit::Score::Point", related_change_id: score_point.id, description: "", created_at: c.created_at) 
end

还有一个Merit::ScoreMerit::Sash表,但我不清楚它们的作用以及是否还需要创建这些记录。

还有什么我忽略了吗?

顺便说一下,Merit::Action.action_valueMerit::ActivityLog.descriptionMerit::Score::Point.log的目的是什么,或者这些只是自由文本字符串?

1 个答案:

答案 0 :(得分:1)

Merit能够为其中的每个用户重新计算声誉Merit::Action。在this StackOverflow answer中,您可以看到现有应用程序如何使用优点:

  1. 删除与用户相关的所有日志,徽章和分数
  2. 将所有操作标记为processed: false
  3. 重新计算现在未处理的规则
  4. 在您的特定情况下,您唯一要创建的Merit模型是action,并将其初始化为processed: false而不是true。然后Merit::Action.check_unprocessed应重新创建您所寻求的声誉。

    This wiki article可以帮助您理解这些步骤背后的逻辑。

    Merit::Action.action_valueMerit::ActivityLog.descriptionMerit::Score::Point.log没有任何有意义的行为,如果需要,您可以使用它们。