2015-04-23 2 views
1

Je ne suis pas sûr de ce qui est le meilleur de la performance, donc je vous demande les gars.Création de l'historique ou de la connexion pour certains événements

Le problème est le suivant:

J'ai un système où chaque utilisateur obtient un certain montant de crédit pour certains événements. J'ai donc donné à mon utilisateur un attribut nommé créditscore qui est modifié sur ces événements. Tout fonctionne bien. Mais maintenant je veux que l'utilisateur voit réellement ce qu'il a fait quand et combien de crédit il a eu pour cela.

Que serait mieux ici:

  • Sauver l'histoire dans un attribut de texte et ajouter des lignes pour chaque événement

    ou

  • écrire un modèle supplémentaire associé à l'utilisateur et créer une instance pour chaque événement. ou

    ou

  • quelque chose de manière différente?

Comme il y a plusieurs événements par utilisateur et par jour, ce serait un énorme texte ou une quantité énorme d'instances. Quoi de mieux que la performance du site Web.

+0

id vous recommandons d'utiliser un modèle associé à l'événement et l'utilisateur afin que vous puissiez suivre les actions et aussi ce que chaque action vaut le crédit sage. Il sera plus facile d'interroger à long terme de cette façon. – DMH

+0

En outre, avec une indexation correcte, vous ne devriez pas rencontrer de problèmes de performance avec l'approche du modèle. –

Répondre

2

Vous ne voulez absolument pas stocker l'historique dans un attribut de texte. La gestion de ce sera un cauchemar tout comme l'interrogation des données.

Vous pouvez créer un modèle CreditEvent et y stocker les événements individuels. Cela fonctionnerait bien. Cependant, avant de commencer, consultez rubygems.org et ruby-toolbox.com pour voir si quelqu'un a déjà fait le travail. Je connais au moins un petit bijou qui semble faire exactement ce que vous voulez faire:

https://github.com/merit-gem/merit

+0

Merci qui répond parfaitement à ma question. Je ne vais pas utiliser le mérite parce que je pense que cela ajoute beaucoup plus de complexité que j'ai besoin et j'aime le garder aussi simplement que possible pour mieux surveiller les risques de sécurité. Je suis allé maintenant avec un modèle associé au modèle de l'utilisateur qui est créé sur chaque événement et enregistre les informations nécessaires. Maintenant, je vais travailler sur une approche pour autodelete les nouvelles instances de modèle après une certaine période pour garder tout le maigre. – Syk