Ruby on Rails最近的活动

时间:2009-08-14 13:34:58

标签: ruby-on-rails

实现StackOverflow样式的Recent Activities页面的最佳方法是什么?

我有一个包含用户照片的图库,我希望当其他用户评论或投票时,会通知他们。

我应该创建一个包含最近活动的新表(每当用户发表评论或投票时更新)或者我应该只使用MySQL查询吗?

2 个答案:

答案 0 :(得分:10)

简短的回答是:这取决于。如果您只需要最近的活动,并且不需要跟踪活动或完整的“活动源”功能,那么SQL就是您的选择。但如果你认为需要做一个完整的活动饲料类,你可以为它创建一个模型。

我们最近在我们的项目上做了一个活动流。以下是我们如何建模

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
我们在answer_controller中

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

要从用户处获取最近的活动列表

@activities = @user.activities

答案 1 :(得分:2)

这篇文章写成了一篇很好的文章,展示了AR,Observers的全面使用,并提供了你需要的迁移。

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

Observers可以使用这些信息来拯救您的模型,以及添加您可以发送电子邮件或其他任何您需要做的活动。