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
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
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