2009-08-14 8 views
4

Quelle est la meilleure façon d'implémenter une page Activités récentes de type StackOverflow?Activités récentes dans Ruby on Rails

J'ai une galerie avec les photos d'utilisateurs et je veux les faire savoir quand les autres utilisateurs commenteront ou votent leurs photos. Dois-je créer une nouvelle table contenant des activités récentes (mise à jour chaque fois qu'un utilisateur publie un commentaire ou un vote) ou devrais-je simplement utiliser une requête MySQL?

Répondre

10

La réponse courte est: ça dépend. Si vous avez seulement besoin des activités les plus récentes et que vous n'avez pas besoin de suivre les activités, ou une fonction complète de 'flux d'activité', SQL est la solution. mais si vous voyez le besoin de faire un truc plein d'activité, vous pouvez créer un modèle pour cela.

Nous avons récemment effectué une activité sur notre projet. Voici comment nous modelée

Class Activity 
    belongs_to :user_activities # all the people that cares about the activity 
    belongs_to :actor, class_name='user' # the actor that cause the activity 

    belongs_to :target, :polymorphic => true # the activity target(e.g. if you vote an answer, the target can be the answer) 
    belongs_to :subtarget, :polymorphic => true # the we added this later since we feel the need for a secondary target, e.g if you rate an answer, target is your answer, secondary target is your rating. 

    def self.add(actor, activity_type, target, subtarget = nil) 
    activity = Activity.new(:actor => actor, :activity_type => activity_type, :target => target, :subtarget => subtarget) 
    activity.save! 
    activity 
    end 
end 

dans le answer_controller nous

Class AnswersController 
    def create 
     ... 
     Activity.add(current_user, ActivityType::QUESTION_ANSWERED, @answer) 
     ... 
    end 
end 

Pour obtenir une liste d'activité récente d'un utilisateur nous ne

@activities = @user.activities 
+1

D'accord. Je commencerais par les requêtes SQL au début et si cela devient trop complexe, a de mauvaises performances, ou ne semble pas correspondre à vos besoins, alors faites un modèle d'activité. – ryanb

+6

Pour éviter d'altérer les modèles avec ce type d'enregistrement d'activité, je recommande Rails Observers: http://api.rubyonrails.org/classes/ActiveRecord/Observer.html – bloudermilk

2

Cela a été rédigé en excellent article qui montre l'utilisation complète de AR, Observers et donne la migration dont vous aurez besoin.

http://mickeyben.com/blog/2010/05/23/creating-an-activity-feed-with-rails/

Observers vous sauver encombrent vos modèles avec ces informations afin d'ajouter ainsi que les activités que vous pouvez envoyer des emails ou tout ce que vous devez faire.

+0

Le lien ne fonctionne pas –

+1

Lien droit: http: // mickeyben .com/blog/2010/05/23/création d'une activité-feed-with-rails / –