注:この例では、 http://railscasts.com/episodes/364-active-record-reputation-systemをフォローしています。
ユーザーにアイテムをランク付け(つまり、1つから5つ星)させるロケーションモデルがあります。
has_reputation:location_rating、source::user、aggregated_by::average
私のコントローラーでは、評価を削除しています:
@ location.delete_evaluation(:location_rating、current_user)
またはそれを更新します:
@ location.add_or_update_evaluation(:location_rating、params [:rating]、current_user)
クエリの方法がひどく混乱しています。
- すべてのユーザーによるロケーションの現在の平均評価
- 特定のユーザーによる特定の場所の評価
- 特定の場所の評価の数
私は@location.reputation_for(:location_rating)
いくつかの奇妙な振る舞いをしようとしています。特定のユーザーが評価を削除した後、新しいreputation_for値が古い評価で平均化されているように見える場合。
例えば:
1.9.3p0 :038 > RSEvaluation.all
RSEvaluation Load (1.7ms) SELECT "rs_evaluations".* FROM "rs_evaluations"
+----+-----------------+-----------+-------------+-----------+-------------+-------+-------------------------+-------------------------+
| id | reputation_name | source_id | source_type | target_id | target_type | value | created_at | updated_at |
+----+-----------------+-----------+-------------+-----------+-------------+-------+-------------------------+-------------------------+
| 46 | tracking | 1 | User | 6 | Location | 0.0 | 2012-08-28 05:15:13 UTC | 2012-08-28 05:15:13 UTC |
| 48 | tracking | 1 | User | 5 | Location | 0.0 | 2012-09-04 14:44:37 UTC | 2012-09-04 14:44:37 UTC |
| 51 | tracking | 1 | User | 8 | Location | 0.0 | 2012-09-12 06:51:58 UTC | 2012-09-12 06:51:58 UTC |
| 52 | tracking | 1 | User | 1 | Location | 0.0 | 2012-09-12 14:54:39 UTC | 2012-09-12 14:54:39 UTC |
| 54 | location_rating | 1 | User | 5 | Location | 3.0 | 2012-09-19 05:10:46 UTC | 2012-09-19 05:18:16 UTC |
| 56 | tracking | 11 | User | 5 | Location | 0.0 | 2012-09-19 05:47:10 UTC | 2012-09-19 05:47:10 UTC |
| 58 | location_rating | 11 | User | 3 | Location | 2.0 | 2012-09-19 06:33:12 UTC | 2012-09-19 06:33:12 UTC |
| 61 | location_rating | 11 | User | 5 | Location | 5.0 | 2012-09-19 07:15:42 UTC | 2012-09-19 07:15:42 UTC |
+----+-----------------+-----------+-------------+-----------+-------------+-------+-------------------------+-------------------------+
ロケーションID=5では、私の評判は(3 + 5)/ 2 = 4であってはなりませんか?私は現在2.59375を取得します。ユーザー11の評価を1に更新すると、新しいレピュテーションは0.59375になります。
私はここで明らかな何かを見逃していると確信しています(私はRailsの初心者なので)。