0

我正在尝试使用Merit将信誉系统添加到现有应用程序中。

我想根据他们的历史活动为所有用户计算积分。Merit 的内部结构相当复杂,有几张表,我想我可能遗漏了一些重要的步骤。以下是我到目前为止所拥有的,我很感激任何更熟悉这个宝石的人的指点。

为了简单起见,假设我想

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

并且我有一个 Comment 表,其中包含看起来像这样的记录

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_value,Merit::ActivityLog.descriptionMerit::Score::Point.log, 或者这些只是自由文本字符串的目的是什么?

4

1 回答 1

1

Merit 有能力从它的Merit::Action. 在这个 StackOverflow 答案中,您可以看到使用优点的现有应用程序如何:

  1. 删除与用户相关的所有日志、徽章和授予的积分
  2. 将所有动作标记为processed: false
  3. 重新计算现在未处理的规则

在您的特定情况下,您要创建的唯一 Merit 模型是action,并将其初始化为processed: false而不是true. Merit::Action.check_unprocessed然后应该重新创建您寻求的声誉。

这篇解释优点内部的 wiki 文章可能会帮助您理解这些步骤背后的逻辑。


Merit::Action.action_value, Merit::ActivityLog.description, 并且Merit::Score::Point.log在优点上没有有意义的行为,如果需要,您可以使用它们。

于 2016-05-04T21:45:40.330 回答