簡體   English   中英

如何“回算”功績積分?

[英]How to 'back calculate' Merit points?

我正在嘗試使用Merit將信譽系統添加到現有應用程序中。

我想根據所有用戶的歷史活動來為其計算積分。 優點有很多表,內部結構非常復雜,我想我可能缺少一些重要步驟。 以下是到目前為止的內容,對於那些熟悉此gem的人,我深表感謝。

為了簡單起見,假設我要

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_valueMerit::Action.action_valueMerit::ActivityLog.descriptionMerit::Score::Point.log的目的是什么,或者這些僅僅是自由文本字符串?

Merit能夠通過Merit::Action重新計算每個用戶的聲譽。 這個StackOverflow答案中,您可以看到使用優點的現有應用程序可能如何:

  1. 刪除與用戶相關的所有日志,徽章和授予的點
  2. 將所有操作標記為已processed: false
  3. 重新計算現在未處理的規則

在您的特定情況下,您要創建的唯一Merit模型是action ,並將其初始化為已processed: false而不是true Merit::Action.check_unprocessed然后應重新創建您尋求的聲譽。

此Wiki文章介紹了優點內部原理,可能有助於您了解這些步驟背后的邏輯。


Merit::Action.action_valueMerit::ActivityLog.descriptionMerit::Score::Point.log在功績上沒有有意義的行為,您可以根據需要使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM