Когда я сделал это раньше , я справился с этим с помощью денормализованной модели UserActivity
или аналогичной с belongs_to
полиморфной ассоциацией с ActivitySource
- который может быть любым изтипы контента, который вы хотите отобразить (посты, комментарии, количество голосов, лайки и т. д.).
Затем, когда создается любой из отображаемых объектов, у вас появляется Observer
, который запускаетсяи создает строку в таблице UserActivity
со ссылкой на запись.
Затем, чтобы отобразить список, вы просто запрашиваете UserActivity
упорядочение по created_at
по убыванию, а затем перемещаетесь по полиморфному activity_source
ассоциация для получения данных контента.Тогда вам понадобятся некоторые смарты в ваших шаблонах представления, чтобы отображать комментарии и сообщения и что-то еще иначе.
Например, что-то вроде ...
user_activity.rb:
class UserActivity < ActiveRecord::Base
belongs_to :activity_source, :polymorphic => true
# awesomeness continues here...
end
comment.rb (пост / что угодно)
class Comment < ActiveRecord::Base
# comment awesomeness here...
end
activity_source_observer.rb
class ActivitySourceObserver < ActiveRecord::Observer
observe :comment, :post
def after_create(activity_source)
UserActivity.create!(
:user => activity_source.user,
:activity_source_id => activity_source.id,
:activity_source_type => activity_source.class.to_s,
:created_at => activity_source.created_at,
:updated_at => activity_source.updated_at)
end
def before_destroy(activity_source)
UserActivity.destroy_all(:activity_source_id => activity_source.id)
end
end