2016-05-04 13 views
0

私は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_value,Merit::ActivityLog.descriptionMerit::Score::Point.logの目的は何ですか?これらは単純にフリーテキスト文字列ですか。

答えて

1

メリットは、すべてのユーザーの評判をMerit::Actionから再計算する能力を持っています。 this StackOverflow answerでは、メリットをかもしれません使用してどのように既存のアプリケーションを見ることができます:

  1. processed: false
  2. など、すべてのアクションが今、未処理のルールを再計算し、ユーザに関連する付与されたすべてのログ、バッジやポイント
  3. マークを削除します。あなたの特定のケースで

、作成したいと思います唯一のメリットモデルはactionあり、かつprocessed: falseの代わりtrueとしてそれを初期化します。 Merit::Action.check_unprocessedはあなたが求めている評判を再現するはずです。

This wiki articleメリット内部については、これらの手順の背後にあるロジックを理解するのに役立つと説明しています。


Merit::Action.action_valueMerit::ActivityLog.description、およびMerit::Score::Point.logはメリットには意味のある行動を持っていないし、必要な場合には、それらを使用することができます。

+0

@TuteCに感謝しましたが、私は以前は答えていましたが、その後のコメントを間違って誤解していたことがわかりました。明らかにしてくれてありがとう!! –

+0

こんにちは@tuteC、 'Merit :: Action.target_model'はどんなフォーマットですか?それは複数の小文字のモデル表現(例:コメント)ですか?このメソッドでポイントを生成するのに問題があります。 'Merit :: Action.check_unprocessed'を実行するとバッジが正しく割り当てられ、' Merit :: Score'にレコードが追加されますが、 'Merit :: Score :: Point'は空のままです。私はこれが正しい結果ではないと考えていますが、原因を理解できないようです。 –

+0

気にしないで、私は以前のポイント定義をメモリ 'Merit :: AppPointRules = Merit :: PointRules.new.defined_rules'からクリアする必要がありました。すべてが今働いています。素晴らしい宝石をありがとう! –