我尝试使用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::Score
和Merit::Sash
表,但我不清楚它们的作用以及是否还需要创建这些记录。
还有什么我忽略了吗?
顺便说一下,Merit::Action.action_value
,Merit::ActivityLog.description
和Merit::Score::Point.log
的目的是什么,或者这些只是自由文本字符串?
答案 0 :(得分:1)
Merit能够为其中的每个用户重新计算声誉Merit::Action
。在this StackOverflow answer中,您可以看到现有应用程序如何使用优点:
processed: false
在您的特定情况下,您唯一要创建的Merit模型是action
,并将其初始化为processed: false
而不是true
。然后Merit::Action.check_unprocessed
应重新创建您所寻求的声誉。
This wiki article可以帮助您理解这些步骤背后的逻辑。
Merit::Action.action_value
,Merit::ActivityLog.description
和Merit::Score::Point.log
没有任何有意义的行为,如果需要,您可以使用它们。