Довольно типичным подходом к этому является отслеживание того, когда пользователь последний раз просматривал конкретный объект (или коллекцию объектов). Затем, если у вас есть created_at
или updated_at
на объектах, которые вы хотите отслеживать просмотры, вы можете подсчитать количество, скажем, постов, которые изменились с момента последнего просмотра пользователем новости. *
Итак, у вас может быть такой класс:
class NewsItemTrack < ActiveRecord::Base
belongs_to :news_item
belongs_to :user
def self.track(news_item_id, user_id)
nt = self.find_by_news_item_id_and_user_id(news_item_id, user_id)
if nt.nil?
nt = self.create(:news_item_id => news_item_id, :user_id => user_id, :last_viewed_at => Time.now)
else
nt.update_attribute(:last_viewed_at, Time.now)
end
end
def new_comment_count
Comment.count(:all, :conditions => ['news_item_id = ? and created_at > ?', self.news_item_id, self.last_viewed_at]
end
end
Где NewsItemTrack.track
будет записывать тот факт, что пользователь просмотрел новость, о которой идет речь. Затем, когда вы хотите узнать, сколько новых комментариев к новостному элементу вы сделаете:
NewsItemTrack.find_by_news_item_id_and_user_id(123, 456).new_comment_count